mirror of https://gitee.com/openkylin/linux.git
f2fs: stop issuing discard immediately if there is queued IO
For background discard policy, even if there is queued user IO, still we will check max_requests times for next discard entry, it is unneeded, let's just stop this round submission immediately. Signed-off-by: Chao Yu <yuchao0@huawei.com> Signed-off-by: Jaegeuk Kim <jaegeuk@kernel.org>
This commit is contained in:
parent
4c6b56c002
commit
522d1711d6
|
@ -1188,7 +1188,7 @@ 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, iter = 0, issued = 0;
|
||||
int i, issued = 0;
|
||||
bool io_interrupted = false;
|
||||
|
||||
for (i = MAX_PLIST_NUM - 1; i >= 0; i--) {
|
||||
|
@ -1209,20 +1209,19 @@ static int __issue_discard_cmd(struct f2fs_sb_info *sbi,
|
|||
if (dpolicy->io_aware && i < dpolicy->io_aware_gran &&
|
||||
!is_idle(sbi)) {
|
||||
io_interrupted = true;
|
||||
goto skip;
|
||||
break;
|
||||
}
|
||||
|
||||
__submit_discard_cmd(sbi, dpolicy, dc);
|
||||
issued++;
|
||||
skip:
|
||||
if (++iter >= dpolicy->max_requests)
|
||||
|
||||
if (++issued >= dpolicy->max_requests)
|
||||
break;
|
||||
}
|
||||
blk_finish_plug(&plug);
|
||||
next:
|
||||
mutex_unlock(&dcc->cmd_lock);
|
||||
|
||||
if (iter >= dpolicy->max_requests)
|
||||
if (issued >= dpolicy->max_requests || io_interrupted)
|
||||
break;
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue