bring back RT delalloc support v2

Christoph Hellwig
2024-02-23T07:15:22Z

Hi all,

this series adds back delalloc support for RT inodes, at least if the RT
extent size is a single file system block. This shows really nice
performance improvements for workloads that frequently rewrite or append
to files, and improves fragmentation for larger writes. On other workloads
it sometimes shows small performance improvements or flat performance.

Changes since v1:
- keep casting to int64_t for xfs_mod_delalloc
- add a patch to clarify and assert that the block delta in
xfs_trans_unreserve_and_mod_sb can only be positive

Diffstat:
libxfs/xfs_ag.c | 4 -
libxfs/xfs_ag_resv.c | 24 ++--------
libxfs/xfs_ag_resv.h | 2
libxfs/xfs_alloc.c | 4 -
libxfs/xfs_bmap.c | 102 ++++++++++++++++++++++++++-----------------
libxfs/xfs_rtbitmap.c | 14 +++++
libxfs/xfs_shared.h | 6 +-
scrub/fscounters.c | 5 +-
scrub/repair.c | 5 --
xfs_fsops.c | 29 +++---------
xfs_fsops.h | 2
xfs_inode.c | 3 -
xfs_iomap.c | 44 ++++++++++++------
xfs_iops.c | 2
xfs_mount.c | 117 +++++++++++++++++++++++++-------------------------
xfs_mount.h | 41 ++++++++++++++---
xfs_rtalloc.c | 2
xfs_super.c | 17 ++++---
xfs_trace.h | 1
xfs_trans.c | 63 ++++++++++++++------------
20 files changed, 276 insertions(+), 211 deletions(-)