diff mbox

f2fs: expose some sectors to user in inline data or dentry case

Message ID 20171013173145.36510-1-jaegeuk@kernel.org (mailing list archive)
State New, archived
Headers show

Commit Message

Jaegeuk Kim Oct. 13, 2017, 5:31 p.m. UTC
If there's some data written through inline data or dentry, we need to shouw
st_blocks. This fixes reporting zero blocks even though there is small written
data.

Signed-off-by: Jaegeuk Kim <jaegeuk@kernel.org>
---
 fs/f2fs/file.c | 5 +++++
 1 file changed, 5 insertions(+)

Comments

Chao Yu Oct. 16, 2017, 3:11 a.m. UTC | #1
On 2017/10/14 1:31, Jaegeuk Kim wrote:
> If there's some data written through inline data or dentry, we need to shouw
> st_blocks. This fixes reporting zero blocks even though there is small written
> data.
> 
> Signed-off-by: Jaegeuk Kim <jaegeuk@kernel.org>

Reviewed-by: Chao Yu <yuchao0@huawei.com>

Thanks,

> ---
>  fs/f2fs/file.c | 5 +++++
>  1 file changed, 5 insertions(+)
> 
> diff --git a/fs/f2fs/file.c b/fs/f2fs/file.c
> index 2eb3efe92018..f7be6c394fa8 100644
> --- a/fs/f2fs/file.c
> +++ b/fs/f2fs/file.c
> @@ -698,6 +698,11 @@ int f2fs_getattr(const struct path *path, struct kstat *stat,
>  				  STATX_ATTR_NODUMP);
>  
>  	generic_fillattr(inode, stat);
> +
> +	/* we need to show initial sectors used for inline_data/dentries */
> +	if (f2fs_has_inline_data(inode) || f2fs_has_inline_dentry(inode))
> +		stat->blocks += (stat->size + 511) >> 9;
> +
>  	return 0;
>  }
>  
>
Jaegeuk Kim Oct. 17, 2017, 10:03 p.m. UTC | #2
On 10/16, Chao Yu wrote:
> On 2017/10/14 1:31, Jaegeuk Kim wrote:
> > If there's some data written through inline data or dentry, we need to shouw
> > st_blocks. This fixes reporting zero blocks even though there is small written
> > data.
> > 
> > Signed-off-by: Jaegeuk Kim <jaegeuk@kernel.org>
> 
> Reviewed-by: Chao Yu <yuchao0@huawei.com>
> 
> Thanks,
> 
> > ---
> >  fs/f2fs/file.c | 5 +++++
> >  1 file changed, 5 insertions(+)
> > 
> > diff --git a/fs/f2fs/file.c b/fs/f2fs/file.c
> > index 2eb3efe92018..f7be6c394fa8 100644
> > --- a/fs/f2fs/file.c
> > +++ b/fs/f2fs/file.c
> > @@ -698,6 +698,11 @@ int f2fs_getattr(const struct path *path, struct kstat *stat,
> >  				  STATX_ATTR_NODUMP);
> >  
> >  	generic_fillattr(inode, stat);
> > +
> > +	/* we need to show initial sectors used for inline_data/dentries */
> > +	if (f2fs_has_inline_data(inode) || f2fs_has_inline_dentry(inode))

FYI;
I added S_ISREG(inode->i_mode) with f2fs_has_inline_data() to avoid quotacheck
error.

> > +		stat->blocks += (stat->size + 511) >> 9;
> > +
> >  	return 0;
> >  }
> >  
> >
Chao Yu Oct. 18, 2017, 2:32 a.m. UTC | #3
On 2017/10/18 6:03, Jaegeuk Kim wrote:
> On 10/16, Chao Yu wrote:
>> On 2017/10/14 1:31, Jaegeuk Kim wrote:
>>> If there's some data written through inline data or dentry, we need to shouw
>>> st_blocks. This fixes reporting zero blocks even though there is small written
>>> data.
>>>
>>> Signed-off-by: Jaegeuk Kim <jaegeuk@kernel.org>
>>
>> Reviewed-by: Chao Yu <yuchao0@huawei.com>
>>
>> Thanks,
>>
>>> ---
>>>  fs/f2fs/file.c | 5 +++++
>>>  1 file changed, 5 insertions(+)
>>>
>>> diff --git a/fs/f2fs/file.c b/fs/f2fs/file.c
>>> index 2eb3efe92018..f7be6c394fa8 100644
>>> --- a/fs/f2fs/file.c
>>> +++ b/fs/f2fs/file.c
>>> @@ -698,6 +698,11 @@ int f2fs_getattr(const struct path *path, struct kstat *stat,
>>>  				  STATX_ATTR_NODUMP);
>>>  
>>>  	generic_fillattr(inode, stat);
>>> +
>>> +	/* we need to show initial sectors used for inline_data/dentries */
>>> +	if (f2fs_has_inline_data(inode) || f2fs_has_inline_dentry(inode))
> 
> FYI;
> I added S_ISREG(inode->i_mode) with f2fs_has_inline_data() to avoid quotacheck
> error.

If this patch is related to quotacheck issue, I doubt that there will be
problemetic, in no journalled quota case, fs quota system won't stat blocks
in inline file, however, after SPO, when using quotacheck to scan file to
recover quota info, blocks of inline file showed in getattr can be stated
into quota. That would be inconsistent.

Thanks,

> 
>>> +		stat->blocks += (stat->size + 511) >> 9;
>>> +
>>>  	return 0;
>>>  }
>>>  
>>>
> 
> .
>
Jaegeuk Kim Oct. 19, 2017, 7:12 p.m. UTC | #4
On 10/18, Chao Yu wrote:
> On 2017/10/18 6:03, Jaegeuk Kim wrote:
> > On 10/16, Chao Yu wrote:
> >> On 2017/10/14 1:31, Jaegeuk Kim wrote:
> >>> If there's some data written through inline data or dentry, we need to shouw
> >>> st_blocks. This fixes reporting zero blocks even though there is small written
> >>> data.
> >>>
> >>> Signed-off-by: Jaegeuk Kim <jaegeuk@kernel.org>
> >>
> >> Reviewed-by: Chao Yu <yuchao0@huawei.com>
> >>
> >> Thanks,
> >>
> >>> ---
> >>>  fs/f2fs/file.c | 5 +++++
> >>>  1 file changed, 5 insertions(+)
> >>>
> >>> diff --git a/fs/f2fs/file.c b/fs/f2fs/file.c
> >>> index 2eb3efe92018..f7be6c394fa8 100644
> >>> --- a/fs/f2fs/file.c
> >>> +++ b/fs/f2fs/file.c
> >>> @@ -698,6 +698,11 @@ int f2fs_getattr(const struct path *path, struct kstat *stat,
> >>>  				  STATX_ATTR_NODUMP);
> >>>  
> >>>  	generic_fillattr(inode, stat);
> >>> +
> >>> +	/* we need to show initial sectors used for inline_data/dentries */
> >>> +	if (f2fs_has_inline_data(inode) || f2fs_has_inline_dentry(inode))
> > 
> > FYI;
> > I added S_ISREG(inode->i_mode) with f2fs_has_inline_data() to avoid quotacheck
> > error.
> 
> If this patch is related to quotacheck issue, I doubt that there will be
> problemetic, in no journalled quota case, fs quota system won't stat blocks
> in inline file, however, after SPO, when using quotacheck to scan file to
> recover quota info, blocks of inline file showed in getattr can be stated
> into quota. That would be inconsistent.

FWIW, quotacheck counts i_blocks via ioctl for normal files. Without this
modification, xfstests gives an failure on quota cases.

> 
> Thanks,
> 
> > 
> >>> +		stat->blocks += (stat->size + 511) >> 9;
> >>> +
> >>>  	return 0;
> >>>  }
> >>>  
> >>>
> > 
> > .
> >
Chao Yu Oct. 23, 2017, 10:11 a.m. UTC | #5
On 2017/10/20 3:12, Jaegeuk Kim wrote:
> On 10/18, Chao Yu wrote:
>> On 2017/10/18 6:03, Jaegeuk Kim wrote:
>>> On 10/16, Chao Yu wrote:
>>>> On 2017/10/14 1:31, Jaegeuk Kim wrote:
>>>>> If there's some data written through inline data or dentry, we need to shouw
>>>>> st_blocks. This fixes reporting zero blocks even though there is small written
>>>>> data.
>>>>>
>>>>> Signed-off-by: Jaegeuk Kim <jaegeuk@kernel.org>
>>>>
>>>> Reviewed-by: Chao Yu <yuchao0@huawei.com>
>>>>
>>>> Thanks,
>>>>
>>>>> ---
>>>>>  fs/f2fs/file.c | 5 +++++
>>>>>  1 file changed, 5 insertions(+)
>>>>>
>>>>> diff --git a/fs/f2fs/file.c b/fs/f2fs/file.c
>>>>> index 2eb3efe92018..f7be6c394fa8 100644
>>>>> --- a/fs/f2fs/file.c
>>>>> +++ b/fs/f2fs/file.c
>>>>> @@ -698,6 +698,11 @@ int f2fs_getattr(const struct path *path, struct kstat *stat,
>>>>>  				  STATX_ATTR_NODUMP);
>>>>>  
>>>>>  	generic_fillattr(inode, stat);
>>>>> +
>>>>> +	/* we need to show initial sectors used for inline_data/dentries */
>>>>> +	if (f2fs_has_inline_data(inode) || f2fs_has_inline_dentry(inode))
>>>
>>> FYI;
>>> I added S_ISREG(inode->i_mode) with f2fs_has_inline_data() to avoid quotacheck
>>> error.
>>
>> If this patch is related to quotacheck issue, I doubt that there will be
>> problemetic, in no journalled quota case, fs quota system won't stat blocks
>> in inline file, however, after SPO, when using quotacheck to scan file to
>> recover quota info, blocks of inline file showed in getattr can be stated
>> into quota. That would be inconsistent.
> 
> FWIW, quotacheck counts i_blocks via ioctl for normal files. Without this
> modification, xfstests gives an failure on quota cases.

OK, let's fix this issue first. ;)

Thanks,

> 
>>
>> Thanks,
>>
>>>
>>>>> +		stat->blocks += (stat->size + 511) >> 9;
>>>>> +
>>>>>  	return 0;
>>>>>  }
>>>>>  
>>>>>
>>>
>>> .
>>>
> 
> ------------------------------------------------------------------------------
> Check out the vibrant tech community on one of the world's most
> engaging tech sites, Slashdot.org! http://sdm.link/slashdot
> _______________________________________________
> Linux-f2fs-devel mailing list
> Linux-f2fs-devel@lists.sourceforge.net
> https://lists.sourceforge.net/lists/listinfo/linux-f2fs-devel
>
diff mbox

Patch

diff --git a/fs/f2fs/file.c b/fs/f2fs/file.c
index 2eb3efe92018..f7be6c394fa8 100644
--- a/fs/f2fs/file.c
+++ b/fs/f2fs/file.c
@@ -698,6 +698,11 @@  int f2fs_getattr(const struct path *path, struct kstat *stat,
 				  STATX_ATTR_NODUMP);
 
 	generic_fillattr(inode, stat);
+
+	/* we need to show initial sectors used for inline_data/dentries */
+	if (f2fs_has_inline_data(inode) || f2fs_has_inline_dentry(inode))
+		stat->blocks += (stat->size + 511) >> 9;
+
 	return 0;
 }