Hi all, Add in-memory data structures for sharding the realtime volume into independent allocation groups. For existing filesystems, the entire rt volume is modelled as having a single large group, with (potentially) a number of rt extents exceeding 2^32 blocks, though these are not likely to exist because the codebase has been a bit broken for decades. The next series fills in the ondisk format and other supporting structures. If you're going to start using this code, I strongly recommend pulling from my git trees, which are linked below. With a bit of luck, this should all go splendidly. Comments and questions are, as always, welcome. --D kernel git tree: https://git.kernel.org/cgit/linux/kernel/git/djwong/xfs-linux.git/log/?h=incore-rtgroups-6.13 --- Commits in this patchset: * xfs: clean up xfs_getfsmap_helper arguments * xfs: create incore realtime group structures * xfs: define locking primitives for realtime groups * xfs: add a lockdep class key for rtgroup inodes * xfs: support caching rtgroup metadata inodes * xfs: add rtgroup-based realtime scrubbing context management * xfs: add a xfs_bmap_free_rtblocks helper * xfs: add a xfs_qm_unmount_rt helper * xfs: factor out a xfs_growfs_rt_alloc_blocks helper * xfs: cleanup xfs_getfsmap_rtdev_rtbitmap * xfs: split xfs_trim_rtdev_extents * xfs: move RT bitmap and summary information to the rtgroup * xfs: support creating per-RTG files in growfs * xfs: remove XFS_ILOCK_RT* * xfs: calculate RT bitmap and summary blocks based on sb_rextents * xfs: factor out a xfs_growfs_rt_alloc_fake_mount helper * xfs: use xfs_growfs_rt_alloc_fake_mount in xfs_growfs_rt_alloc_blocks * xfs: factor out a xfs_growfs_check_rtgeom helper * xfs: refactor xfs_rtbitmap_blockcount * xfs: refactor xfs_rtsummary_blockcount * xfs: make RT extent numbers relative to the rtgroup --- fs/xfs/Makefile | 1 fs/xfs/libxfs/xfs_bmap.c | 46 ++- fs/xfs/libxfs/xfs_format.h | 3 fs/xfs/libxfs/xfs_rtbitmap.c | 199 ++++++++------- fs/xfs/libxfs/xfs_rtbitmap.h | 147 ++++++----- fs/xfs/libxfs/xfs_rtgroup.c | 484 ++++++++++++++++++++++++++++++++++++ fs/xfs/libxfs/xfs_rtgroup.h | 274 +++++++++++++++++++++ fs/xfs/libxfs/xfs_sb.c | 13 + fs/xfs/libxfs/xfs_trans_resv.c | 2 fs/xfs/libxfs/xfs_types.h | 8 + fs/xfs/scrub/bmap.c | 13 + fs/xfs/scrub/common.c | 78 ++++++ fs/xfs/scrub/common.h | 30 ++ fs/xfs/scrub/fscounters.c | 25 +- fs/xfs/scrub/repair.c | 24 ++ fs/xfs/scrub/repair.h | 7 + fs/xfs/scrub/rtbitmap.c | 54 ++-- fs/xfs/scrub/rtsummary.c | 111 ++++---- fs/xfs/scrub/rtsummary_repair.c | 7 - fs/xfs/scrub/scrub.c | 33 ++ fs/xfs/scrub/scrub.h | 13 + fs/xfs/xfs_bmap_util.c | 3 fs/xfs/xfs_buf_item_recover.c | 25 ++ fs/xfs/xfs_discard.c | 100 +++++--- fs/xfs/xfs_fsmap.c | 329 ++++++++++++++----------- fs/xfs/xfs_fsmap.h | 15 + fs/xfs/xfs_inode.c | 3 fs/xfs/xfs_inode.h | 13 - fs/xfs/xfs_iomap.c | 4 fs/xfs/xfs_mount.c | 15 + fs/xfs/xfs_mount.h | 26 +- fs/xfs/xfs_qm.c | 27 ++ fs/xfs/xfs_rtalloc.c | 520 ++++++++++++++++++++++++--------------- fs/xfs/xfs_super.c | 3 fs/xfs/xfs_trace.c | 1 fs/xfs/xfs_trace.h | 74 ++++-- 36 files changed, 2020 insertions(+), 710 deletions(-) create mode 100644 fs/xfs/libxfs/xfs_rtgroup.c create mode 100644 fs/xfs/libxfs/xfs_rtgroup.h