This series expands atomic write support to filesystems, specifically XFS. Flag FS_XFLAG_ATOMICWRITES is added as an enabling flag for atomic writes. XFS can be formatted for atomic writes as follows: mkfs.xfs -i atomicwrites=1 -b size=16384 /dev/sda Support can be enabled through xfs_io command: $xfs_io -c "chattr +W" filename $xfs_io -c "lsattr -v" filename [atomic-writes] filename $xfs_io -c statx filename ... stat.stx_atomic_write_unit_min = 16384 stat.stx_atomic_write_unit_max = 16384 stat.stx_atomic_write_segments_max = 1 ... Dependence on forcealign is gone for the moment. This means that we can only write a single FS block atomically. Since we can now have FS block size > PAGE_SIZE for XFS, we can write atomically write 4K+ blocks on x86. Using the large FS block size has downsides, so we still want the forcealign feature. Baseline is v6.12-rc1 Basic xfsprogs support at: https://github.com/johnpgarry/xfsprogs-dev/tree/atomic-writes-v7 Patches for this series can be found at: https://github.com/johnpgarry/linux/tree/atomic-writes-v6.12-fs-v7 Changes since v6: - Add iomap documentation update (Darrick) - Drop reflink restriction (Darrick, Christoph) - Catch XFS buffered IO fallback (Darrick) - Check IOCB_DIRECT in generic_atomic_write_valid() - Tweaks to coding style (Darrick) - Add RB tags from Darrick and Christoph (thanks!) Changes since v5: - Drop forcealign dependency - Can support atomically writing a single FS block - XFS_DIFLAG2_ATOMICWRITES is inherited from parent directories - Add RB tags from Darrick (thanks!) John Garry (8): block/fs: Pass an iocb to generic_atomic_write_valid() fs: Export generic_atomic_write_valid() fs/block: Check for IOCB_DIRECT in generic_atomic_write_valid() fs: iomap: Atomic write support xfs: Support FS_XFLAG_ATOMICWRITES xfs: Support atomic write for statx xfs: Validate atomic writes xfs: Support setting FMODE_CAN_ATOMIC_WRITE .../filesystems/iomap/operations.rst | 11 ++++++ block/fops.c | 22 ++++++----- fs/iomap/direct-io.c | 38 +++++++++++++++++-- fs/iomap/trace.h | 3 +- fs/read_write.c | 16 +++++--- fs/xfs/libxfs/xfs_format.h | 11 +++++- fs/xfs/libxfs/xfs_inode_buf.c | 22 +++++++++++ fs/xfs/libxfs/xfs_inode_util.c | 6 +++ fs/xfs/libxfs/xfs_sb.c | 2 + fs/xfs/xfs_buf.c | 7 ++++ fs/xfs/xfs_buf.h | 3 ++ fs/xfs/xfs_file.c | 10 +++++ fs/xfs/xfs_inode.h | 22 +++++++++++ fs/xfs/xfs_ioctl.c | 27 +++++++++++++ fs/xfs/xfs_iops.c | 25 ++++++++++++ fs/xfs/xfs_mount.h | 2 + fs/xfs/xfs_super.c | 4 ++ include/linux/fs.h | 2 +- include/linux/iomap.h | 1 + include/uapi/linux/fs.h | 1 + 20 files changed, 211 insertions(+), 24 deletions(-) -- 2.31.1