From: Eric Biggers
Date: Sun Oct 02 2022 - 23:32:00 EST

The following changes since commit 1c23f9e627a7b412978b4e852793c5e3c3efc555:

Linux 6.0-rc2 (2022-08-21 17:32:54 -0700)

are available in the Git repository at:

https://git.kernel.org/pub/scm/linux/kernel/git/ebiggers/linux.git tags/statx-dioalign-for-linus

for you to fetch changes up to 61a223df421f698c253143014cfd384255b3cf1e:

xfs: support STATX_DIOALIGN (2022-09-11 19:47:12 -0500)


Make statx() support reporting direct I/O (DIO) alignment information.
This provides a generic interface for userspace programs to determine
whether a file supports DIO, and if so with what alignment restrictions.
Specifically, STATX_DIOALIGN works on block devices, and on regular
files when their containing filesystem has implemented support.

An interface like this has been requested for years, since the
conditions for when DIO is supported in Linux have gotten increasingly
complex over time. Today, DIO support and alignment requirements can be
affected by various filesystem features such as multi-device support,
data journalling, inline data, encryption, verity, compression,
checkpoint disabling, log-structured mode, etc. Further complicating
things, Linux v6.0 relaxed the traditional rule of DIO needing to be
aligned to the block device's logical block size; now user buffers (but
not file offsets) only need to be aligned to the DMA alignment.

The approach of uplifting the XFS specific ioctl XFS_IOC_DIOINFO was
discarded in favor of creating a clean new interface with statx().

For more information, see the individual commits and the man page update

Eric Biggers (8):
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: simplify f2fs_force_buffered_io()
f2fs: support STATX_DIOALIGN
xfs: support STATX_DIOALIGN

block/bdev.c | 23 ++++++++++++++++++++++
fs/crypto/inline_crypt.c | 49 +++++++++++++++++++++++------------------------
fs/ext4/ext4.h | 1 +
fs/ext4/file.c | 37 ++++++++++++++++++++++++-----------
fs/ext4/inode.c | 37 +++++++++++++++++++++++++++++++++++
fs/f2fs/f2fs.h | 40 --------------------------------------
fs/f2fs/file.c | 43 ++++++++++++++++++++++++++++++++++++++++-
fs/stat.c | 14 ++++++++++++++
fs/xfs/xfs_iops.c | 10 ++++++++++
include/linux/blkdev.h | 4 ++++
include/linux/fscrypt.h | 7 ++-----
include/linux/stat.h | 2 ++
include/uapi/linux/stat.h | 4 +++-
13 files changed, 188 insertions(+), 83 deletions(-)