|
@@ -2469,23 +2469,24 @@ int f2fs_trim_fs(struct f2fs_sb_info *sbi, struct fstrim_range *range)
|
|
|
if (err)
|
|
|
goto out;
|
|
|
|
|
|
- start_block = START_BLOCK(sbi, start_segno);
|
|
|
- end_block = START_BLOCK(sbi, end_segno + 1);
|
|
|
-
|
|
|
- __init_discard_policy(sbi, &dpolicy, DPOLICY_FSTRIM, cpc.trim_minlen);
|
|
|
- __issue_discard_cmd_range(sbi, &dpolicy, start_block, end_block);
|
|
|
-
|
|
|
/*
|
|
|
* We filed discard candidates, but actually we don't need to wait for
|
|
|
* all of them, since they'll be issued in idle time along with runtime
|
|
|
* discard option. User configuration looks like using runtime discard
|
|
|
* or periodic fstrim instead of it.
|
|
|
*/
|
|
|
- if (!test_opt(sbi, DISCARD)) {
|
|
|
- trimmed = __wait_discard_cmd_range(sbi, &dpolicy,
|
|
|
+ if (test_opt(sbi, DISCARD))
|
|
|
+ goto out;
|
|
|
+
|
|
|
+ start_block = START_BLOCK(sbi, start_segno);
|
|
|
+ end_block = START_BLOCK(sbi, end_segno + 1);
|
|
|
+
|
|
|
+ __init_discard_policy(sbi, &dpolicy, DPOLICY_FSTRIM, cpc.trim_minlen);
|
|
|
+ __issue_discard_cmd_range(sbi, &dpolicy, start_block, end_block);
|
|
|
+
|
|
|
+ trimmed = __wait_discard_cmd_range(sbi, &dpolicy,
|
|
|
start_block, end_block);
|
|
|
- range->len = F2FS_BLK_TO_BYTES(trimmed);
|
|
|
- }
|
|
|
+ range->len = F2FS_BLK_TO_BYTES(trimmed);
|
|
|
out:
|
|
|
return err;
|
|
|
}
|