Commit d7b549de authored by Daeho Jeong's avatar Daeho Jeong Committed by Jaegeuk Kim
Browse files

f2fs: add carve_out sysfs node



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: default avatarDaeho Jeong <daehojeong@google.com>
Reviewed-by: default avatarChao Yu <chao@kernel.org>
Signed-off-by: default avatarJaegeuk Kim <jaegeuk@kernel.org>
parent f7f8932c
Loading
Loading
Loading
Loading
+10 −0
Original line number Diff line number Diff line
@@ -836,3 +836,13 @@ Contact: "Jaegeuk Kim" <jaegeuk@kernel.org>
Description:	It reclaims the given KBs of file-backed pages registered by
		ioctl(F2FS_IOC_DONATE_RANGE).
		For example, writing N tries to drop N KBs spaces in LRU.

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.
+3 −0
Original line number Diff line number Diff line
@@ -1813,6 +1813,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 */
+2 −1
Original line number Diff line number Diff line
@@ -1849,7 +1849,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;
+2 −0
Original line number Diff line number Diff line
@@ -1122,6 +1122,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
@@ -1309,6 +1310,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);