The software solution supports XFS atomic write, but the hardware solution does not fully support it. Christoph Hellwig (1): xfs: cleanup xfs_vn_getattr Darrick J. Wong (5): xfs: add helpers to compute log item overhead xfs: add helpers to compute transaction reservation for finishing intent items xfs: separate out setting buftarg atomic writes limits xfs: ignore HW which cannot atomic write a single block xfs: allow sysadmins to specify a maximum atomic write limit at mount time John Garry (30): block: Pass blk_queue_get_max_sectors() a request pointer block: Generalize chunk_sectors support as boundary support block: Add core atomic write support block: Call blkdev_dio_unaligned() from blkdev_direct_IO() block: Add fops atomic write support 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 iomap: Minor code simplification in iomap_dio_bio_iter() iomap: Rename IOMAP_ATOMIC -> IOMAP_ATOMIC_HW iomap: Support SW-based atomic writes iomap: inline iomap_dio_bio_opflags() iomap: comment on atomic write checks in iomap_dio_bio_iter() iomap: rework IOMAP atomic flags fs: add atomic write unit max opt to statx xfs: rename xfs_inode_can_atomicwrite() -> xfs_inode_can_hw_atomic_write() xfs: allow block allocator to take an alignment hint xfs: refactor xfs_reflink_end_cow_extent() xfs: refine atomic write size check in xfs_file_write_iter() xfs: add xfs_atomic_write_cow_iomap_begin() xfs: add large atomic writes checks in xfs_direct_write_iomap_begin() xfs: commit CoW-based atomic writes atomically xfs: add xfs_file_dio_write_atomic() xfs: add xfs_calc_atomic_write_unit_max() xfs: update atomic write limits Prasad Singamsetty (2): fs: Initial atomic write support fs: Add initial atomic write support info to statx Documentation/ABI/stable/sysfs-block | 53 +++++ block/blk-core.c | 22 ++ block/blk-merge.c | 67 +++++- block/blk-mq.c | 2 +- block/blk-settings.c | 88 ++++++++ block/blk-sysfs.c | 33 +++ block/blk.h | 9 +- block/fops.c | 51 +++-- drivers/md/dm.c | 2 +- fs/aio.c | 8 +- fs/btrfs/ioctl.c | 2 +- fs/iomap/direct-io.c | 144 +++++++------ fs/iomap/trace.h | 3 +- fs/read_write.c | 22 +- fs/stat.c | 35 ++++ fs/xfs/libxfs/xfs_bmap.c | 5 + fs/xfs/libxfs/xfs_bmap.h | 6 +- fs/xfs/libxfs/xfs_log_rlimit.c | 3 + fs/xfs/libxfs/xfs_trans_resv.c | 291 +++++++++++++++++++++++++-- fs/xfs/libxfs/xfs_trans_resv.h | 21 ++ fs/xfs/xfs_bmap_item.c | 10 + fs/xfs/xfs_bmap_item.h | 3 + fs/xfs/xfs_buf.c | 37 +++- fs/xfs/xfs_buf.h | 6 +- fs/xfs/xfs_buf_item.c | 19 ++ fs/xfs/xfs_buf_item.h | 3 + fs/xfs/xfs_extfree_item.c | 10 + fs/xfs/xfs_extfree_item.h | 3 + fs/xfs/xfs_file.c | 87 +++++++- fs/xfs/xfs_inode.h | 5 + fs/xfs/xfs_iomap.c | 195 +++++++++++++++++- fs/xfs/xfs_iomap.h | 1 + fs/xfs/xfs_iops.c | 101 +++++++++- fs/xfs/xfs_iops.h | 3 + fs/xfs/xfs_log_cil.c | 4 +- fs/xfs/xfs_log_priv.h | 13 ++ fs/xfs/xfs_mount.c | 126 ++++++++++++ fs/xfs/xfs_mount.h | 17 ++ fs/xfs/xfs_refcount_item.c | 10 + fs/xfs/xfs_refcount_item.h | 3 + fs/xfs/xfs_reflink.c | 146 +++++++++++--- fs/xfs/xfs_reflink.h | 5 + fs/xfs/xfs_rmap_item.c | 10 + fs/xfs/xfs_rmap_item.h | 3 + fs/xfs/xfs_super.c | 64 +++++- fs/xfs/xfs_trace.h | 108 ++++++++++ include/linux/blk_types.h | 8 +- include/linux/blkdev.h | 84 +++++++- include/linux/fs.h | 19 +- include/linux/iomap.h | 5 + include/linux/stat.h | 4 + include/uapi/linux/fs.h | 5 +- include/uapi/linux/stat.h | 13 +- io_uring/rw.c | 8 +- 54 files changed, 1820 insertions(+), 185 deletions(-) -- 2.39.2