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