On Wed, Apr 03, 2024 at 03:22:41AM -0400, Sweet Tea Dorminy wrote: > For many years, various btrfs users have written programs to discover > the actual disk space used by files, using root-only interfaces. > However, this information is a great fit for fiemap: it is inherently > tied to extent information, all filesystems can use it, and the > capabilities required for FIEMAP make sense for this additional > information also. > > Hence, this patchset adds various additional information to fiemap, > and extends filesystems (but not iomap) to return it. This uses some of > the reserved padding in the fiemap extent structure, so programs unaware > of the changes will be unaffected. > > This is based on next-20240403. I've tested the btrfs part of this with > the standard btrfs testing matrix locally and manually, and done minimal > testing of the non-btrfs parts. > > I'm unsure whether btrfs should be returning the entire physical extent > referenced by a particular logical range, or just the part of the > physical extent referenced by that range. The v2 thread has a discussion > of this. I believe there was some talk of using the padding for a device ID, so that fiemap could properly support multi device filesystems. Are we sure this is the best use of those bytes? > > Changelog: > > v3: > - Adapted all the direct users of fiemap, except iomap, to emit > the new fiemap information, as far as I understand the other > filesystems. > > v2: > - Adopted PHYS_LEN flag and COMPRESSED flag from the previous version, > as per Andreas Dilger' comment. > https://patchwork.ozlabs.org/project/linux-ext4/patch/4f8d5dc5b51a43efaf16c39398c23a6276e40a30.1386778303.git.dsterba@xxxxxxx/ > - https://lore.kernel.org/linux-fsdevel/cover.1711588701.git.sweettea-kernel@xxxxxxxxxx/T/#t > > v1: https://lore.kernel.org/linux-fsdevel/20240315030334.GQ6184@frogsfrogsfrogs/T/#t > > Sweet Tea Dorminy (13): > fs: fiemap: add physical_length field to extents > fs: fiemap: update fiemap_fill_next_extent() signature > fs: fiemap: add new COMPRESSED extent state > btrfs: fiemap: emit new COMPRESSED state. > btrfs: fiemap: return extent physical size > nilfs2: fiemap: return correct extent physical length > ext4: fiemap: return correct extent physical length > f2fs: fiemap: add physical length to trace_f2fs_fiemap > f2fs: fiemap: return correct extent physical length > ocfs2: fiemap: return correct extent physical length > bcachefs: fiemap: return correct extent physical length > f2fs: fiemap: emit new COMPRESSED state > bcachefs: fiemap: emit new COMPRESSED state > > Documentation/filesystems/fiemap.rst | 35 ++++++++++---- > fs/bcachefs/fs.c | 17 +++++-- > fs/btrfs/extent_io.c | 72 ++++++++++++++++++---------- > fs/ext4/extents.c | 3 +- > fs/f2fs/data.c | 36 +++++++++----- > fs/f2fs/inline.c | 7 +-- > fs/ioctl.c | 11 +++-- > fs/iomap/fiemap.c | 2 +- > fs/nilfs2/inode.c | 18 ++++--- > fs/ntfs3/frecord.c | 7 +-- > fs/ocfs2/extent_map.c | 10 ++-- > fs/smb/client/smb2ops.c | 1 + > include/linux/fiemap.h | 2 +- > include/trace/events/f2fs.h | 10 ++-- > include/uapi/linux/fiemap.h | 34 ++++++++++--- > 15 files changed, 178 insertions(+), 87 deletions(-) > > > base-commit: 75e31f66adc4c8d049e8aac1f079c1639294cd65 > -- > 2.43.0 >