On Sat, Oct 19, 2024 at 12:51:05PM +0000, John Garry wrote: > 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(-) > > -- Hi John, I've tested the whole patchset on powerpc (64k pagesize) with 4k, 16k and 64k blocksizes and it passes the tests. My tests basically check following scenarios: Statx behavior: # 1.1 bs > unit_max # 1.2 bs < unit_max # 1.3 bs == unit_max # 1.4 dev deosn't support pwrite tests: # 3.1 len < fsmin # 3.2 len > fsmax # 3.3 write not naturally aligned # 3.4 Atomic write abiding to all rule For the whole patchset, feel free to add: Tested-by: Ojaswin Mujoo <ojaswin@xxxxxxxxxxxxx> #On ppc64 Thanks, Ojaswin > 2.31.1 >