This series expands atomic write support to filesystems, specifically XFS. Since XFS rtvol supports extent alignment already, support will initially be added there. When XFS forcealign feature is merged, then we can similarly support atomic writes for a non-rtvol filesystem. Flag FS_XFLAG_ATOMICWRITES is added as an enabling flag for atomic writes. For XFS rtvol, support can be enabled through xfs_io command: $xfs_io -c "chattr +W" filename $xfs_io -c "lsattr -v" filename [realtime, atomic-writes] filename The FS needs to be formatted with a specific extent alignment size, like: mkf.xfs -r rtdev=/dev/sdb,extsize=16K -d rtinherit=1 /dev/sda This enables 16K atomic write support. There are no checks whether the underlying HW actually supports that for enabling atomic writes with xfs_io, though, so statx needs to be issued for a file to know atomic write limits. For supporting non-rtvol, we will require forcealign enabled. As such, a dedicated xfs_io command to enable atomic writes for a regular FS may be useful, which would enable FS_XFLAG_ATOMICWRITES, enable forcealign, and set an extent alignment hint. Baseline is following series (which is based on v6.8-rc1): https://urldefense.com/v3/__https://lore.kernel.org/linux-nvme/20240124113841.31824-1-john.g.garry@xxxxxxxxxx/T/*m4ad28b480a8e12eb51467e17208d98ca50041ff2__;Iw!!ACWV5N9M2RV99hQ!PKOcFzPtVYZ9uATl1BrTJmYanWxEtCKJPV-tTPDYqeTjuWmChXn08ZcmP_H07A9mxPyQ8wwjdSzgH0eYU_45MaIOJyEW$ Basic xfsprogs support at: https://urldefense.com/v3/__https://github.com/johnpgarry/xfsprogs-dev/tree/atomicwrites__;!!ACWV5N9M2RV99hQ!PKOcFzPtVYZ9uATl1BrTJmYanWxEtCKJPV-tTPDYqeTjuWmChXn08ZcmP_H07A9mxPyQ8wwjdSzgH0eYU_45MTapy6qp$ John Garry (6): fs: iomap: Atomic write support fs: Add FS_XFLAG_ATOMICWRITES flag fs: xfs: Support FS_XFLAG_ATOMICWRITES for rtvol fs: xfs: Support atomic write for statx fs: xfs: iomap atomic write support fs: xfs: Set FMODE_CAN_ATOMIC_WRITE for FS_XFLAG_ATOMICWRITES set fs/iomap/direct-io.c | 21 +++++++++++++++++- fs/iomap/trace.h | 3 ++- fs/xfs/libxfs/xfs_format.h | 8 +++++-- fs/xfs/libxfs/xfs_sb.c | 2 ++ fs/xfs/xfs_file.c | 2 ++ fs/xfs/xfs_inode.c | 22 +++++++++++++++++++ fs/xfs/xfs_inode.h | 7 ++++++ fs/xfs/xfs_ioctl.c | 19 ++++++++++++++-- fs/xfs/xfs_iomap.c | 41 ++++++++++++++++++++++++++++++++++ fs/xfs/xfs_iops.c | 45 ++++++++++++++++++++++++++++++++++++++ fs/xfs/xfs_iops.h | 4 ++++ fs/xfs/xfs_mount.h | 2 ++ fs/xfs/xfs_super.c | 4 ++++ include/linux/iomap.h | 1 + include/uapi/linux/fs.h | 1 + 15 files changed, 176 insertions(+), 6 deletions(-) -- 2.31.1