f2fs: don't bother wait_ms by foreground gc
authorqixiaoyu1 <qxy65535@gmail.com>
Mon, 18 Jul 2022 03:28:40 +0000 (11:28 +0800)
committerJaegeuk Kim <jaegeuk@kernel.org>
Sun, 31 Jul 2022 03:17:07 +0000 (20:17 -0700)
f2fs_gc returns -EINVAL via f2fs_balance_fs when there is enough free
secs after write checkpoint, but with gc_merge enabled, it will cause
the sleep time of gc thread to be set to no_gc_sleep_time even if there
are many dirty segments can be selected.

Signed-off-by: qixiaoyu1 <qixiaoyu1@xiaomi.com>
Reviewed-by: Chao Yu <chao@kernel.org>
Signed-off-by: Jaegeuk Kim <jaegeuk@kernel.org>
fs/f2fs/gc.c

index c38bdaf831af1f024b72e0eb3613d21aabd68813..6da21d405ce1eff931581bc98a592866c02ebd2e 100644 (file)
@@ -150,8 +150,11 @@ do_gc:
                gc_control.nr_free_secs = foreground ? 1 : 0;
 
                /* if return value is not zero, no victim was selected */
-               if (f2fs_gc(sbi, &gc_control))
-                       wait_ms = gc_th->no_gc_sleep_time;
+               if (f2fs_gc(sbi, &gc_control)) {
+                       /* don't bother wait_ms by foreground gc */
+                       if (!foreground)
+                               wait_ms = gc_th->no_gc_sleep_time;
+               }
 
                if (foreground)
                        wake_up_all(&gc_th->fggc_wq);