Message ID | 20250311182931.1043290-1-daeho43@gmail.com (mailing list archive) |
---|---|
State | New |
Headers | show |
Series | [f2fs-dev] f2fs: add carve_out sysfs node | expand |
On 3/12/25 02:29, Daeho Jeong wrote: > From: Daeho Jeong <daehojeong@google.com> > > For several zoned storage devices, vendors will provide extra space > which was used for device level GC than specs and F2FS can use this > space for filesystem level GC. To do that, we can reserve the space > using reserved_blocks. However, it is not enough, since this extra > space should not be shown to users. So, with this new sysfs node, > we can hide the space by substracting reserved_blocks from total > bytes. > > Signed-off-by: Daeho Jeong <daehojeong@google.com>
On 3/12/25 02:29, Daeho Jeong wrote: > From: Daeho Jeong <daehojeong@google.com> > > For several zoned storage devices, vendors will provide extra space > which was used for device level GC than specs and F2FS can use this > space for filesystem level GC. To do that, we can reserve the space > using reserved_blocks. However, it is not enough, since this extra > space should not be shown to users. So, with this new sysfs node, > we can hide the space by substracting reserved_blocks from total > bytes. > > Signed-off-by: Daeho Jeong <daehojeong@google.com> Reviewed-by: Chao Yu <chao@kernel.org> Thanks,
diff --git a/Documentation/ABI/testing/sysfs-fs-f2fs b/Documentation/ABI/testing/sysfs-fs-f2fs index 3e1630c70d8a..6e327fdc6ef4 100644 --- a/Documentation/ABI/testing/sysfs-fs-f2fs +++ b/Documentation/ABI/testing/sysfs-fs-f2fs @@ -828,3 +828,13 @@ Date: November 2024 Contact: "Chao Yu" <chao@kernel.org> Description: It controls max read extent count for per-inode, the value of threshold is 10240 by default. + +What: /sys/fs/f2fs/<disk>/carve_out +Date: March 2025 +Contact: "Daeho Jeong" <daehojeong@google.com> +Description: For several zoned storage devices, vendors will provide extra space which + was used for device level GC than specs and F2FS can use this space for + filesystem level GC. To do that, we can reserve the space using + reserved_blocks. However, it is not enough, since this extra space should + not be shown to users. So, with this new sysfs node, we can hide the space + by substracting reserved_blocks from total bytes. diff --git a/fs/f2fs/f2fs.h b/fs/f2fs/f2fs.h index 1afa7be16e7d..5718996c42a8 100644 --- a/fs/f2fs/f2fs.h +++ b/fs/f2fs/f2fs.h @@ -1800,6 +1800,9 @@ struct f2fs_sb_info { u64 committed_atomic_block; u64 revoked_atomic_block; + /* carve out reserved_blocks from total blocks */ + bool carve_out; + #ifdef CONFIG_F2FS_FS_COMPRESSION struct kmem_cache *page_array_slab; /* page array entry */ unsigned int page_array_slab_size; /* default page array slab size */ diff --git a/fs/f2fs/super.c b/fs/f2fs/super.c index 19b67828ae32..42651ec824f9 100644 --- a/fs/f2fs/super.c +++ b/fs/f2fs/super.c @@ -1836,7 +1836,8 @@ static int f2fs_statfs(struct dentry *dentry, struct kstatfs *buf) buf->f_blocks = total_count - start_count; spin_lock(&sbi->stat_lock); - + if (sbi->carve_out) + buf->f_blocks -= sbi->current_reserved_blocks; user_block_count = sbi->user_block_count; total_valid_node_count = valid_node_count(sbi); avail_node_count = sbi->total_node_count - F2FS_RESERVED_NODE_NUM; diff --git a/fs/f2fs/sysfs.c b/fs/f2fs/sysfs.c index d15c68b28952..a50f5cfe9fa9 100644 --- a/fs/f2fs/sysfs.c +++ b/fs/f2fs/sysfs.c @@ -1065,6 +1065,7 @@ F2FS_SBI_GENERAL_RW_ATTR(max_read_extent_count); F2FS_SBI_GENERAL_RO_ATTR(unusable_blocks_per_sec); F2FS_SBI_GENERAL_RW_ATTR(blkzone_alloc_policy); #endif +F2FS_SBI_GENERAL_RW_ATTR(carve_out); /* STAT_INFO ATTR */ #ifdef CONFIG_F2FS_STAT_FS @@ -1252,6 +1253,7 @@ static struct attribute *f2fs_attrs[] = { ATTR_LIST(warm_data_age_threshold), ATTR_LIST(last_age_weight), ATTR_LIST(max_read_extent_count), + ATTR_LIST(carve_out), NULL, }; ATTRIBUTE_GROUPS(f2fs);