[PATCH] f2fs: subtract current_reserved_blocks from total

Daeho Jeong posted 1 patch 11 months, 1 week ago
fs/f2fs/super.c | 3 +--
1 file changed, 1 insertion(+), 2 deletions(-)
[PATCH] f2fs: subtract current_reserved_blocks from total
Posted by Daeho Jeong 11 months, 1 week ago
From: Daeho Jeong <daehojeong@google.com>

current_reserved_blocks is not allowed to utilize. For some zoned
storage devices, vendors will provide extra space which was used for
device level GC than specs and we will use this space for filesystem
level GC. This extra space should not be shown to users, otherwise,
users will see not standardized size number like 530GB, not 512GB.

Signed-off-by: Daeho Jeong <daehojeong@google.com>
---
 fs/f2fs/super.c | 3 +--
 1 file changed, 1 insertion(+), 2 deletions(-)

diff --git a/fs/f2fs/super.c b/fs/f2fs/super.c
index 19b67828ae32..c346dcc2518a 100644
--- a/fs/f2fs/super.c
+++ b/fs/f2fs/super.c
@@ -1833,10 +1833,9 @@ static int f2fs_statfs(struct dentry *dentry, struct kstatfs *buf)
 	buf->f_type = F2FS_SUPER_MAGIC;
 	buf->f_bsize = sbi->blocksize;
 
-	buf->f_blocks = total_count - start_count;
-
 	spin_lock(&sbi->stat_lock);
 
+	buf->f_blocks = total_count - start_count - 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.48.1.711.g2feabab25a-goog
Re: [f2fs-dev] [PATCH] f2fs: subtract current_reserved_blocks from total
Posted by Chao Yu 11 months, 1 week ago
On 3/5/25 03:20, Daeho Jeong wrote:
> From: Daeho Jeong <daehojeong@google.com>
> 
> current_reserved_blocks is not allowed to utilize. For some zoned
> storage devices, vendors will provide extra space which was used for
> device level GC than specs and we will use this space for filesystem
> level GC. This extra space should not be shown to users, otherwise,
> users will see not standardized size number like 530GB, not 512GB.

Hi Daeho,

However, if there are other users e.g. oem or vendor want to use
reserved_blocks and current_reserved_blocks sysfs interface to
reserve space, then, total size will be less than 512GB?

What do you think of adding a new variable to indicate reserved
space for zoned storage case only?

Thanks,

> 
> Signed-off-by: Daeho Jeong <daehojeong@google.com>
> ---
>  fs/f2fs/super.c | 3 +--
>  1 file changed, 1 insertion(+), 2 deletions(-)
> 
> diff --git a/fs/f2fs/super.c b/fs/f2fs/super.c
> index 19b67828ae32..c346dcc2518a 100644
> --- a/fs/f2fs/super.c
> +++ b/fs/f2fs/super.c
> @@ -1833,10 +1833,9 @@ static int f2fs_statfs(struct dentry *dentry, struct kstatfs *buf)
>  	buf->f_type = F2FS_SUPER_MAGIC;
>  	buf->f_bsize = sbi->blocksize;
>  
> -	buf->f_blocks = total_count - start_count;
> -
>  	spin_lock(&sbi->stat_lock);
>  
> +	buf->f_blocks = total_count - start_count - 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;
Re: [f2fs-dev] [PATCH] f2fs: subtract current_reserved_blocks from total
Posted by Jaegeuk Kim 11 months, 1 week ago
On 03/05, Chao Yu wrote:
> On 3/5/25 03:20, Daeho Jeong wrote:
> > From: Daeho Jeong <daehojeong@google.com>
> > 
> > current_reserved_blocks is not allowed to utilize. For some zoned
> > storage devices, vendors will provide extra space which was used for
> > device level GC than specs and we will use this space for filesystem
> > level GC. This extra space should not be shown to users, otherwise,
> > users will see not standardized size number like 530GB, not 512GB.
> 
> Hi Daeho,
> 
> However, if there are other users e.g. oem or vendor want to use
> reserved_blocks and current_reserved_blocks sysfs interface to
> reserve space, then, total size will be less than 512GB?
> 
> What do you think of adding a new variable to indicate reserved
> space for zoned storage case only?

Or, adding a sysfs entry like "carve_out" to determine this?

> 
> Thanks,
> 
> > 
> > Signed-off-by: Daeho Jeong <daehojeong@google.com>
> > ---
> >  fs/f2fs/super.c | 3 +--
> >  1 file changed, 1 insertion(+), 2 deletions(-)
> > 
> > diff --git a/fs/f2fs/super.c b/fs/f2fs/super.c
> > index 19b67828ae32..c346dcc2518a 100644
> > --- a/fs/f2fs/super.c
> > +++ b/fs/f2fs/super.c
> > @@ -1833,10 +1833,9 @@ static int f2fs_statfs(struct dentry *dentry, struct kstatfs *buf)
> >  	buf->f_type = F2FS_SUPER_MAGIC;
> >  	buf->f_bsize = sbi->blocksize;
> >  
> > -	buf->f_blocks = total_count - start_count;
> > -
> >  	spin_lock(&sbi->stat_lock);
> >  
> > +	buf->f_blocks = total_count - start_count - 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;
>
Re: [f2fs-dev] [PATCH] f2fs: subtract current_reserved_blocks from total
Posted by Daeho Jeong 11 months, 1 week ago
On Wed, Mar 5, 2025 at 6:35 AM Jaegeuk Kim <jaegeuk@kernel.org> wrote:
>
> On 03/05, Chao Yu wrote:
> > On 3/5/25 03:20, Daeho Jeong wrote:
> > > From: Daeho Jeong <daehojeong@google.com>
> > >
> > > current_reserved_blocks is not allowed to utilize. For some zoned
> > > storage devices, vendors will provide extra space which was used for
> > > device level GC than specs and we will use this space for filesystem
> > > level GC. This extra space should not be shown to users, otherwise,
> > > users will see not standardized size number like 530GB, not 512GB.
> >
> > Hi Daeho,
> >
> > However, if there are other users e.g. oem or vendor want to use
> > reserved_blocks and current_reserved_blocks sysfs interface to
> > reserve space, then, total size will be less than 512GB?
> >
> > What do you think of adding a new variable to indicate reserved
> > space for zoned storage case only?
>
> Or, adding a sysfs entry like "carve_out" to determine this?

Good points. Thanks, guys.

>
> >
> > Thanks,
> >
> > >
> > > Signed-off-by: Daeho Jeong <daehojeong@google.com>
> > > ---
> > >  fs/f2fs/super.c | 3 +--
> > >  1 file changed, 1 insertion(+), 2 deletions(-)
> > >
> > > diff --git a/fs/f2fs/super.c b/fs/f2fs/super.c
> > > index 19b67828ae32..c346dcc2518a 100644
> > > --- a/fs/f2fs/super.c
> > > +++ b/fs/f2fs/super.c
> > > @@ -1833,10 +1833,9 @@ static int f2fs_statfs(struct dentry *dentry, struct kstatfs *buf)
> > >     buf->f_type = F2FS_SUPER_MAGIC;
> > >     buf->f_bsize = sbi->blocksize;
> > >
> > > -   buf->f_blocks = total_count - start_count;
> > > -
> > >     spin_lock(&sbi->stat_lock);
> > >
> > > +   buf->f_blocks = total_count - start_count - 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;
> >