diff mbox series

[f2fs-dev] f2fs: subtract current_reserved_blocks from total

Message ID 20250304192041.4048741-1-daeho43@gmail.com (mailing list archive)
State New
Headers show
Series [f2fs-dev] f2fs: subtract current_reserved_blocks from total | expand

Commit Message

Daeho Jeong March 4, 2025, 7:20 p.m. UTC
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(-)

Comments

Chao Yu March 5, 2025, 9:10 a.m. UTC | #1
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;
Jaegeuk Kim March 5, 2025, 2:35 p.m. UTC | #2
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;
>
Daeho Jeong March 5, 2025, 4:03 p.m. UTC | #3
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;
> >
diff mbox series

Patch

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;