[PATCH v8 0/7] block atomic writes for xfs

John Garry posted 7 patches 1 month, 1 week ago
There is a newer version of this series
.../filesystems/iomap/operations.rst          | 11 ++++++
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                              |  3 ++
fs/xfs/xfs_file.c                             | 10 +++++
fs/xfs/xfs_inode.h                            | 15 ++++++++
fs/xfs/xfs_iops.c                             | 25 ++++++++++++
include/linux/fs.h                            |  2 +-
include/linux/iomap.h                         |  1 +
12 files changed, 131 insertions(+), 22 deletions(-)
[PATCH v8 0/7] 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 write 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-v8

Changes since v7:
- Drop FS_XFLAG_ATOMICWRITES
- Reorder block/fs patches and add fixes tags (Christoph)
- Add RB tag from Christoph (Thanks!)
- Rebase

Changes since v6:
- Add iomap documentation update (Darrick)
- Drop reflink restriction (Darrick, Christoph)
- Catch XFS buffered IO fallback (Darrick)
- Check IOCB_DIRECT in generic_atomic_write_valid()
- Tweaks to coding style (Darrick)
- Add RB tags from Darrick and Christoph (thanks!)

John Garry (7):
  block/fs: Pass an iocb to generic_atomic_write_valid()
  fs/block: Check for IOCB_DIRECT in generic_atomic_write_valid()
  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          | 11 ++++++
 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                              |  3 ++
 fs/xfs/xfs_file.c                             | 10 +++++
 fs/xfs/xfs_inode.h                            | 15 ++++++++
 fs/xfs/xfs_iops.c                             | 25 ++++++++++++
 include/linux/fs.h                            |  2 +-
 include/linux/iomap.h                         |  1 +
 12 files changed, 131 insertions(+), 22 deletions(-)

-- 
2.31.1