mbox series

[v10,0/8] block atomic writes for xfs

Message ID 20241019125113.369994-1-john.g.garry@oracle.com (mailing list archive)
Headers show
Series block atomic writes for xfs | expand

Message

John Garry Oct. 19, 2024, 12:51 p.m. UTC
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(-)

Comments

Jens Axboe Oct. 19, 2024, 10:49 p.m. UTC | #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 Oct. 19, 2024, 10:50 p.m. UTC | #2
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.
John Garry Oct. 23, 2024, 12:42 p.m. UTC | #3
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
Carlos Maiolino Oct. 23, 2024, 12:50 p.m. UTC | #4
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
> 
>
Ojaswin Mujoo Oct. 24, 2024, 6:32 a.m. UTC | #5
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
>