This series expands atomic write support to filesystems, specifically XFS. Initially we will only support writing exactly 1x FS block atomically. Since we can now have FS block size > PAGE_SIZE for XFS, we can write atomically 4K+ blocks on x86. No special per-inode flag is required for enabling writing 1x F block. In future, to support writing more than one FS block atomically, a new FS XFLAG flag may then introduced - like FS_XFLAG_BIG_ATOMICWRITES. This would depend on a feature like forcealign. So if we format the FS for 16K FS block size: mkfs.xfs -b size=16384 /dev/sda The statx reports atomic write unit min/max = FS block size: $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 ... Baseline is 77bfe1b11ea0 (tag: xfs-6.12-fixes-3, xfs/xfs-6.12-fixesC, xfs/for-next) xfs: fix a typo Patches for this series can be found at: https://github.com/johnpgarry/linux/tree/atomic-writes-v6.12-fs-v10 Changes since v9: - iomap doc fix (Darrick) - Add RB tags from Christoph and Darrick (Thanks!) Changes since v8: - Add bdev atomic write unit helpers (Christoph) - Add comment on FS block size limit (Christoph) - Stylistic improvements (Christoph) - Add RB tags from Christoph (thanks!) Changes since v7: - Drop FS_XFLAG_ATOMICWRITES - Reorder block/fs patches and add fixes tags (Christoph) - Add RB tag from Christoph (Thanks!) - Rebase John Garry (8): block/fs: Pass an iocb to generic_atomic_write_valid() fs/block: Check for IOCB_DIRECT in generic_atomic_write_valid() block: Add bdev atomic write limits helpers fs: Export generic_atomic_write_valid() fs: iomap: Atomic write support xfs: Support atomic write for statx xfs: Validate atomic writes xfs: Support setting FMODE_CAN_ATOMIC_WRITE .../filesystems/iomap/operations.rst | 12 ++++++ block/fops.c | 22 ++++++----- fs/iomap/direct-io.c | 38 +++++++++++++++++-- fs/iomap/trace.h | 3 +- fs/read_write.c | 16 +++++--- fs/xfs/xfs_buf.c | 7 ++++ fs/xfs/xfs_buf.h | 4 ++ fs/xfs/xfs_file.c | 16 ++++++++ fs/xfs/xfs_inode.h | 15 ++++++++ fs/xfs/xfs_iops.c | 22 +++++++++++ include/linux/blkdev.h | 16 ++++++++ include/linux/fs.h | 2 +- include/linux/iomap.h | 1 + 13 files changed, 152 insertions(+), 22 deletions(-) -- 2.31.1