summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDaeho Jeong <daehojeong@google.com>2024-10-15 09:54:27 -0700
committerJaegeuk Kim <jaegeuk@kernel.org>2024-11-01 01:19:00 +0000
commitfa08972bcb7baaf5f1f4fdf251dc08bdd3ab1cf0 (patch)
tree8b93899a30f9e9e40ee27a3609f7b503a7f13de1
parent2d56b4e39192fb9693284ce8aa3416b517d785b7 (diff)
downloadlinux-fa08972bcb7baaf5f1f4fdf251dc08bdd3ab1cf0.tar.gz
linux-fa08972bcb7baaf5f1f4fdf251dc08bdd3ab1cf0.tar.bz2
linux-fa08972bcb7baaf5f1f4fdf251dc08bdd3ab1cf0.zip
f2fs: decrease spare area for pinned files for zoned devices
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>
-rw-r--r--fs/f2fs/file.c3
-rw-r--r--fs/f2fs/gc.h1
-rw-r--r--fs/f2fs/segment.c3
3 files changed, 5 insertions, 2 deletions
diff --git a/fs/f2fs/file.c b/fs/f2fs/file.c
index adc7d64a6f47..348ef73bf8dd 100644
--- a/fs/f2fs/file.c
+++ b/fs/f2fs/file.c
@@ -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);
diff --git a/fs/f2fs/gc.h b/fs/f2fs/gc.h
index 2914b678bf8f..5c1eaf55e127 100644
--- a/fs/f2fs/gc.h
+++ b/fs/f2fs/gc.h
@@ -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
diff --git a/fs/f2fs/segment.c b/fs/f2fs/segment.c
index d91fbd1b27ba..859d70bbc5e7 100644
--- a/fs/f2fs/segment.c
+++ b/fs/f2fs/segment.c
@@ -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;