]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
f2fs: decrease spare area for pinned files for zoned devices
authorDaeho Jeong <daehojeong@google.com>
Tue, 15 Oct 2024 16:54:27 +0000 (09:54 -0700)
committerJaegeuk Kim <jaegeuk@kernel.org>
Fri, 1 Nov 2024 01:19:00 +0000 (01:19 +0000)
Now we reclaim too much space before allocating pinned space for zoned
devices.

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/file.c
fs/f2fs/gc.h
fs/f2fs/segment.c

index adc7d64a6f47de703bcfcb744b5d4355d93e6f0a..348ef73bf8dd3770d69470ec78ce0ec9b009d961 100644 (file)
@@ -1790,7 +1790,8 @@ static int f2fs_expand_inode_data(struct inode *inode, loff_t offset,
 
                map.m_len = sec_blks;
 next_alloc:
-               if (has_not_enough_free_secs(sbi, 0,
+               if (has_not_enough_free_secs(sbi, 0, f2fs_sb_has_blkzoned(sbi) ?
+                       ZONED_PIN_SEC_REQUIRED_COUNT :
                        GET_SEC_FROM_SEG(sbi, overprovision_segments(sbi)))) {
                        f2fs_down_write(&sbi->gc_lock);
                        stat_inc_gc_call_count(sbi, FOREGROUND);
index 2914b678bf8fb9adb3b66ae54536ff471cb2bb03..5c1eaf55e1277be21c57e21bb71381f9d800cbb5 100644 (file)
@@ -35,6 +35,7 @@
 #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 ZONED_PIN_SEC_REQUIRED_COUNT   1
 
 #define DEF_GC_FAILED_PINNED_FILES     2048
 #define MAX_GC_FAILED_PINNED_FILES     USHRT_MAX
index d91fbd1b27ba615e1c186a8fc2a49cc150b86200..859d70bbc5e70294b56cc0194b6befaf34a3549e 100644 (file)
@@ -3237,7 +3237,8 @@ retry:
 
        if (f2fs_sb_has_blkzoned(sbi) && err == -EAGAIN && gc_required) {
                f2fs_down_write(&sbi->gc_lock);
-               err = f2fs_gc_range(sbi, 0, GET_SEGNO(sbi, FDEV(0).end_blk), true, 1);
+               err = f2fs_gc_range(sbi, 0, GET_SEGNO(sbi, FDEV(0).end_blk),
+                               true, ZONED_PIN_SEC_REQUIRED_COUNT);
                f2fs_up_write(&sbi->gc_lock);
 
                gc_required = false;