.../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(-)
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
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@linux.ibm.com> #On ppc64 Thanks, Ojaswin > 2.31.1 >
On Sat, 19 Oct 2024 12:51:05 +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. > > [...] Applied, thanks! [1/8] block/fs: Pass an iocb to generic_atomic_write_valid() commit: 9a8dbdadae509e5717ff6e5aa572ca0974d2101d [2/8] fs/block: Check for IOCB_DIRECT in generic_atomic_write_valid() commit: c3be7ebbbce5201e151f17e28a6c807602f369c9 [3/8] block: Add bdev atomic write limits helpers commit: 1eadb157947163ca72ba8963b915fdc099ce6cca Best regards, -- Jens Axboe
On 10/19/24 4:49 PM, Jens Axboe wrote: > > On Sat, 19 Oct 2024 12:51:05 +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. >> >> [...] > > Applied, thanks! > > [1/8] block/fs: Pass an iocb to generic_atomic_write_valid() > commit: 9a8dbdadae509e5717ff6e5aa572ca0974d2101d > [2/8] fs/block: Check for IOCB_DIRECT in generic_atomic_write_valid() > commit: c3be7ebbbce5201e151f17e28a6c807602f369c9 > [3/8] block: Add bdev atomic write limits helpers > commit: 1eadb157947163ca72ba8963b915fdc099ce6cca These are now sitting in: git://git.kernel.dk/linux for-6.13/block-atomic and can be pulled in by the fs/xfs people. -- Jens Axboe
On 19/10/2024 23:50, Jens Axboe wrote: >> On Sat, 19 Oct 2024 12:51:05 +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. >>> >>> [...] >> Applied, thanks! >> >> [1/8] block/fs: Pass an iocb to generic_atomic_write_valid() >> commit: 9a8dbdadae509e5717ff6e5aa572ca0974d2101d >> [2/8] fs/block: Check for IOCB_DIRECT in generic_atomic_write_valid() >> commit: c3be7ebbbce5201e151f17e28a6c807602f369c9 >> [3/8] block: Add bdev atomic write limits helpers >> commit: 1eadb157947163ca72ba8963b915fdc099ce6cca Thanks Jens > These are now sitting in: > > git://git.kernel.dk/linux for-6.13/block-atomic > > and can be pulled in by the fs/xfs people. Carlos, can you kindly consider merging that branch and picking up the iomap + xfs changes? Cheers
On Wed, Oct 23, 2024 at 01:42:24PM GMT, John Garry wrote: > On 19/10/2024 23:50, Jens Axboe wrote: > > > On Sat, 19 Oct 2024 12:51:05 +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. > > > > > > > > [...] > > > Applied, thanks! > > > > > > [1/8] block/fs: Pass an iocb to generic_atomic_write_valid() > > > commit: 9a8dbdadae509e5717ff6e5aa572ca0974d2101d > > > [2/8] fs/block: Check for IOCB_DIRECT in generic_atomic_write_valid() > > > commit: c3be7ebbbce5201e151f17e28a6c807602f369c9 > > > [3/8] block: Add bdev atomic write limits helpers > > > commit: 1eadb157947163ca72ba8963b915fdc099ce6cca > > Thanks Jens > > > These are now sitting in: > > > > git://git.kernel.dk/linux for-6.13/block-atomic > > > > and can be pulled in by the fs/xfs people. > > Carlos, can you kindly consider merging that branch and picking up the iomap > + xfs changes? yup, I'll queue them up for 6.12 merge window Carlos > > Cheers > >
© 2016 - 2024 Red Hat, Inc.