]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
f2fs: increase BG GC migration window granularity when boosted for zoned devices
authorDaeho Jeong <daehojeong@google.com>
Mon, 9 Sep 2024 22:19:43 +0000 (15:19 -0700)
committerJaegeuk Kim <jaegeuk@kernel.org>
Wed, 11 Sep 2024 03:33:00 +0000 (03:33 +0000)
Need bigger BG GC migration window granularity when free section is
running low.

Signed-off-by: Daeho Jeong <daehojeong@google.com>
Reviewed-by: Chao Yu <chao@kernel.org>
Signed-off-by: Jaegeuk Kim <jaegeuk@kernel.org>
fs/f2fs/gc.c
fs/f2fs/gc.h

index 5cd316d2102de5b87dc425af8cfab5f72fdbf83e..9a3d3994cf2baa941121125d1d3631c3511c3195 100644 (file)
@@ -1728,10 +1728,18 @@ static int do_garbage_collect(struct f2fs_sb_info *sbi,
                        sec_end_segno -= SEGS_PER_SEC(sbi) -
                                        f2fs_usable_segs_in_sec(sbi, segno);
 
-               if (gc_type == BG_GC)
-                       end_segno = start_segno +
+               if (gc_type == BG_GC) {
+                       unsigned int window_granularity =
                                sbi->migration_window_granularity;
 
+                       if (f2fs_sb_has_blkzoned(sbi) &&
+                                       !has_enough_free_blocks(sbi,
+                                       LIMIT_BOOST_ZONED_GC))
+                               window_granularity *= BOOST_GC_MULTIPLE;
+
+                       end_segno = start_segno + window_granularity;
+               }
+
                if (end_segno > sec_end_segno)
                        end_segno = sec_end_segno;
        }
index 245f93663745a0a5c4ae903b6e7994ab83d52e71..78abeebd68b5ec97a4eee462589ceadc781c7ca1 100644 (file)
@@ -33,6 +33,7 @@
 #define LIMIT_NO_ZONED_GC      60 /* percentage over total user space of no gc for zoned devices */
 #define LIMIT_BOOST_ZONED_GC   25 /* percentage over total user space of boosted gc for zoned devices */
 #define DEF_MIGRATION_WINDOW_GRANULARITY_ZONED 3
+#define BOOST_GC_MULTIPLE      5
 
 #define DEF_GC_FAILED_PINNED_FILES     2048
 #define MAX_GC_FAILED_PINNED_FILES     USHRT_MAX