Re: [PATCH v4 0/9] make statx() return DIO alignment information

From: Jeff Layton
Date: Fri Aug 26 2022 - 13:19:49 EST


On Fri, 2022-07-22 at 00:12 -0700, Eric Biggers wrote:
> This patchset makes the statx() system call return direct I/O (DIO)
> alignment information. This allows userspace to easily determine
> whether a file supports DIO, and if so with what alignment restrictions.
>
> Patch 1 adds the basic VFS support for STATX_DIOALIGN. Patch 2 wires it
> up for all block device files. The remaining patches wire it up for
> regular files on ext4, f2fs, and xfs. Support for regular files on
> other filesystems can be added later.
>
> I've also written a man-pages patch, which I'm sending separately.
>
> Note, f2fs has one corner case where DIO reads are allowed but not DIO
> writes. The proposed statx fields can't represent this. My proposal
> (patch 6) is to just eliminate this case, as it seems much too weird.
> But I'd appreciate any feedback on that part.
>
> This patchset applies to v5.19-rc7.
>
> Changed v3 => v4:
> - Added xfs support.
>
> - Moved the helper function for block devices into block/bdev.c.
>
> - Adjusted the ext4 patch to not introduce a bug where misaligned DIO
> starts being allowed on encrypted files when it gets combined with
> the patch "iomap: add support for dma aligned direct-io" that is
> queued in the block tree for 5.20.
>
> - Made a simplification in fscrypt_dio_supported().
>
> Changed v2 => v3:
> - Dropped the stx_offset_align_optimal field, since its purpose
> wasn't clearly distinguished from the existing stx_blksize.
>
> - Renamed STATX_IOALIGN to STATX_DIOALIGN, to reflect the new focus
> on DIO only.
>
> - Similarly, renamed stx_{mem,offset}_align_dio to
> stx_dio_{mem,offset}_align, to reflect the new focus on DIO only.
>
> - Wired up STATX_DIOALIGN on block device files.
>
> Changed v1 => v2:
> - No changes.
>
> Eric Biggers (9):
> statx: add direct I/O alignment information
> vfs: support STATX_DIOALIGN on block devices
> fscrypt: change fscrypt_dio_supported() to prepare for STATX_DIOALIGN
> ext4: support STATX_DIOALIGN
> f2fs: move f2fs_force_buffered_io() into file.c
> f2fs: don't allow DIO reads but not DIO writes
> f2fs: simplify f2fs_force_buffered_io()
> f2fs: support STATX_DIOALIGN
> xfs: support STATX_DIOALIGN
>
> block/bdev.c | 25 ++++++++++++++++++++
> fs/crypto/inline_crypt.c | 49 +++++++++++++++++++--------------------
> fs/ext4/ext4.h | 1 +
> fs/ext4/file.c | 37 ++++++++++++++++++++---------
> fs/ext4/inode.c | 36 ++++++++++++++++++++++++++++
> fs/f2fs/f2fs.h | 45 -----------------------------------
> fs/f2fs/file.c | 45 ++++++++++++++++++++++++++++++++++-
> fs/stat.c | 14 +++++++++++
> fs/xfs/xfs_iops.c | 9 +++++++
> include/linux/blkdev.h | 4 ++++
> include/linux/fscrypt.h | 7 ++----
> include/linux/stat.h | 2 ++
> include/uapi/linux/stat.h | 4 +++-
> 13 files changed, 190 insertions(+), 88 deletions(-)
>
> base-commit: ff6992735ade75aae3e35d16b17da1008d753d28

Hi Eric,

Can I ask what your plans are with this set? I didn't see it in
linux-next yet, so I wasn't sure when you were looking to get it merged.
I'm working on patches to add a new statx field for the i_version
counter as well and I want to make sure that our work doesn't collide.

Thanks,
--
Jeff Layton <jlayton@xxxxxxxxxx>