[PATCH] f2fs: hurry up to issue discard after io interruption

From: Chao Yu
Date: Tue Sep 12 2017 - 06:09:05 EST


Once we encounter I/O interruption during issuing discards, we will delay
long time before next round, but if system status is I/O idle during the
time, it may loses opportunity to issue discards. So this patch changes
to hurry up to issue discard after io interruption.

Signed-off-by: Chao Yu <yuchao0@xxxxxxxxxx>
---
fs/f2fs/segment.c | 15 ++++++++++++++-
1 file changed, 14 insertions(+), 1 deletion(-)

diff --git a/fs/f2fs/segment.c b/fs/f2fs/segment.c
index 7fd742f747ce..3ee2236fc091 100644
--- a/fs/f2fs/segment.c
+++ b/fs/f2fs/segment.c
@@ -1062,6 +1062,7 @@ static int __issue_discard_cmd(struct f2fs_sb_info *sbi, bool issue_cond)
struct blk_plug plug;
int iter = 0, issued = 0;
int i;
+ bool io_interrupted = false;

mutex_lock(&dcc->cmd_lock);
f2fs_bug_on(sbi,
@@ -1083,10 +1084,19 @@ static int __issue_discard_cmd(struct f2fs_sb_info *sbi, bool issue_cond)
continue;
}

- if (!issue_cond || is_idle(sbi)) {
+ if (!issue_cond) {
+ __submit_discard_cmd(sbi, dc);
issued++;
+ continue;
+ }
+
+ if (is_idle(sbi)) {
__submit_discard_cmd(sbi, dc);
+ issued++;
+ } else {
+ io_interrupted = true;
}
+
if (issue_cond && iter++ > DISCARD_ISSUE_RATE)
goto out;
}
@@ -1097,6 +1107,9 @@ static int __issue_discard_cmd(struct f2fs_sb_info *sbi, bool issue_cond)
blk_finish_plug(&plug);
mutex_unlock(&dcc->cmd_lock);

+ if (!issued && io_interrupted)
+ issued = -1;
+
return issued;
}

--
2.13.1.388.g69e6b9b4f4a9