Under the current logic, when gc_urgent_high_remaining is set to 1,
the mode will be switched to normal at the beginning, instead of
running in gc_urgent mode.

Let's switch the gc mode back to normal when the gc ends.

Fixes: 265576181b4a ("f2fs: remove gc_urgent_high_limited for cleanup")

Signed-off-by: Yangtao Li <[email protected]>
---
 fs/f2fs/gc.c | 19 +++++++++----------
 1 file changed, 9 insertions(+), 10 deletions(-)

diff --git a/fs/f2fs/gc.c b/fs/f2fs/gc.c
index 4546e01b2ee0..e0ff99c7e3f2 100644
--- a/fs/f2fs/gc.c
+++ b/fs/f2fs/gc.c
@@ -96,16 +96,6 @@ static int gc_thread_func(void *data)
                 * invalidated soon after by user update or deletion.
                 * So, I'd like to wait some time to collect dirty segments.
                 */
-               if (sbi->gc_mode == GC_URGENT_HIGH) {
-                       spin_lock(&sbi->gc_urgent_high_lock);
-                       if (sbi->gc_urgent_high_remaining) {
-                               sbi->gc_urgent_high_remaining--;
-                               if (!sbi->gc_urgent_high_remaining)
-                                       sbi->gc_mode = GC_NORMAL;
-                       }
-                       spin_unlock(&sbi->gc_urgent_high_lock);
-               }
-
                if (sbi->gc_mode == GC_URGENT_HIGH ||
                                sbi->gc_mode == GC_URGENT_MID) {
                        wait_ms = gc_th->urgent_sleep_time;
@@ -162,6 +152,15 @@ static int gc_thread_func(void *data)
                /* balancing f2fs's metadata periodically */
                f2fs_balance_fs_bg(sbi, true);
 next:
+               if (sbi->gc_mode == GC_URGENT_HIGH) {
+                       spin_lock(&sbi->gc_urgent_high_lock);
+                       if (sbi->gc_urgent_high_remaining) {
+                               sbi->gc_urgent_high_remaining--;
+                               if (!sbi->gc_urgent_high_remaining)
+                                       sbi->gc_mode = GC_NORMAL;
+                       }
+                       spin_unlock(&sbi->gc_urgent_high_lock);
+               }
                sb_end_write(sbi->sb);
 
        } while (!kthread_should_stop());
-- 
2.25.1



_______________________________________________
Linux-f2fs-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/linux-f2fs-devel

Reply via email to