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

John Garry posted 8 patches 1 month, 1 week ago
.../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(-)
[PATCH v10 0/8] block atomic writes for xfs
Posted by John Garry 1 month, 1 week ago
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
Re: [PATCH v10 0/8] block atomic writes for xfs
Posted by Ojaswin Mujoo 1 month ago
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
>
Re: (subset) [PATCH v10 0/8] block atomic writes for xfs
Posted by Jens Axboe 1 month, 1 week ago
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
Re: (subset) [PATCH v10 0/8] block atomic writes for xfs
Posted by Jens Axboe 1 month, 1 week ago
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
Re: (subset) [PATCH v10 0/8] block atomic writes for xfs
Posted by John Garry 1 month ago
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
Re: (subset) [PATCH v10 0/8] block atomic writes for xfs
Posted by Carlos Maiolino 1 month ago
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
> 
>