Chao Yu <c...@kernel.org> 于2024年11月1日周五 10:36写道:
>
> On 2024/10/31 13:59, Zhiguo Niu wrote:
> > If user give a file size as "length" parameter for fiemap
> > operations, but this size is non-block size aligned,
> > it will show 2 segments fiemap results even this whole file
> > is contiguous on disk, such as the following results, please
> > note that this f2fs_io has been modified for testing.
> >
> >   ./f2fs_io fiemap 0 19304 ylog/analyzer.py
> > Fiemap: offset = 0 len = 19304
> >          logical addr.    physical addr.   length           flags
> > 0       0000000000000000 0000000020baa000 0000000000004000 00001000
> > 1       0000000000004000 0000000020bae000 0000000000001000 00001001
> >
> > after this patch:
> >   ./f2fs_io fiemap 0 19304 ylog/analyzer.py
> > Fiemap: offset = 0 len = 19304
> >       logical addr.    physical addr.   length           flags
> > 0     0000000000000000 00000000315f3000 0000000000005000 00001000
>
> Why is FIEMAP_EXTENT_LAST missing in #0 extent? As we can see it
> in #1 extent before your change.
Hi Chao,
after I confirm, this log came from my local code and with some other
modification.
And after I use the f2fs original code with this patch , can see the
FIEMAP_EXTENT_LAST
has been tagged,  the following is the fiemap log.

/f2fs_io fiemap 0 19034 ylog/analyzer.py                                      <
Fiemap: offset = 0 len = 19034
    logical addr.    physical addr.   length           flags
0    0000000000000000 00000000315f3000 0000000000005000 00001001
I will update the commit msg in the next version after reviewing.
Thanks a lot.
>
> 1       0000000000004000 0000000020bae000 0000000000001000 00001001
>
> Thanks,
>
> >
> > Signed-off-by: Zhiguo Niu <zhiguo....@unisoc.com>
> > ---
> > f2fs_io has been modified for testing, the length for fiemap is
> > real file size, not block number
> > ---
> >   fs/f2fs/data.c | 4 ++--
> >   1 file changed, 2 insertions(+), 2 deletions(-)
> >
> > diff --git a/fs/f2fs/data.c b/fs/f2fs/data.c
> > index 90fa8ab..8c9bb42 100644
> > --- a/fs/f2fs/data.c
> > +++ b/fs/f2fs/data.c
> > @@ -1966,8 +1966,8 @@ int f2fs_fiemap(struct inode *inode, struct 
> > fiemap_extent_info *fieinfo,
> >                       goto out;
> >       }
> >
> > -     if (bytes_to_blks(inode, len) == 0)
> > -             len = blks_to_bytes(inode, 1);
> > +     if (len & (blks_to_bytes(inode, 1) - 1))
> > +             len = round_up(len, blks_to_bytes(inode, 1));
> >
> >       start_blk = bytes_to_blks(inode, start);
> >       last_blk = bytes_to_blks(inode, start + len - 1);
>


_______________________________________________
Linux-f2fs-devel mailing list
Linux-f2fs-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/linux-f2fs-devel

Reply via email to