Merge "f2fs: fix long latency due to discard during umount"
This commit is contained in:
commit
0b85eda114
1 changed files with 10 additions and 2 deletions
|
@ -1100,7 +1100,6 @@ static void __init_discard_policy(struct f2fs_sb_info *sbi,
|
|||
} else if (discard_type == DPOLICY_FSTRIM) {
|
||||
dpolicy->io_aware = false;
|
||||
} else if (discard_type == DPOLICY_UMOUNT) {
|
||||
dpolicy->max_requests = UINT_MAX;
|
||||
dpolicy->io_aware = false;
|
||||
/* we need to issue all to keep CP_TRIMMED_FLAG */
|
||||
dpolicy->granularity = 1;
|
||||
|
@ -1461,6 +1460,8 @@ next:
|
|||
|
||||
return issued;
|
||||
}
|
||||
static unsigned int __wait_all_discard_cmd(struct f2fs_sb_info *sbi,
|
||||
struct discard_policy *dpolicy);
|
||||
|
||||
static int __issue_discard_cmd(struct f2fs_sb_info *sbi,
|
||||
struct discard_policy *dpolicy)
|
||||
|
@ -1469,12 +1470,14 @@ static int __issue_discard_cmd(struct f2fs_sb_info *sbi,
|
|||
struct list_head *pend_list;
|
||||
struct discard_cmd *dc, *tmp;
|
||||
struct blk_plug plug;
|
||||
int i, issued = 0;
|
||||
int i, issued;
|
||||
bool io_interrupted = false;
|
||||
|
||||
if (dpolicy->timeout != 0)
|
||||
f2fs_update_time(sbi, dpolicy->timeout);
|
||||
|
||||
retry:
|
||||
issued = 0;
|
||||
for (i = MAX_PLIST_NUM - 1; i >= 0; i--) {
|
||||
if (dpolicy->timeout != 0 &&
|
||||
f2fs_time_over(sbi, dpolicy->timeout))
|
||||
|
@ -1521,6 +1524,11 @@ next:
|
|||
break;
|
||||
}
|
||||
|
||||
if (dpolicy->type == DPOLICY_UMOUNT && issued) {
|
||||
__wait_all_discard_cmd(sbi, dpolicy);
|
||||
goto retry;
|
||||
}
|
||||
|
||||
if (!issued && io_interrupted)
|
||||
issued = -1;
|
||||
|
||||
|
|
Loading…
Reference in a new issue