[GIT PULL 13/18] xfs: online repair of rmap btrees

Darrick J. Wong
2024-02-24T01:32:21Z

The following changes since commit 0dc63c8a1ce39c1ac7da536ee9174cdc714afae2:

xfs: launder in-memory btree buffers before transaction commit (2024-02-22 12:43:36 -0800)

are available in the Git repository at:

https://git.kernel.org/pub/scm/linux/kernel/git/djwong/xfs-linux.git tags/repair-rmap-btree-6.9_2024-02-23

for you to fetch changes up to 7e1b84b24d257700e417bc9cd724c1efdff653d7:

xfs: hook live rmap operations during a repair operation (2024-02-22 12:43:40 -0800)

----------------------------------------------------------------
xfs: online repair of rmap btrees [v29.3 13/18]

We have now constructed the four tools that we need to scan the
filesystem looking for reverse mappings: an inode scanner, hooks to
receive live updates from other writer threads, the ability to construct
btrees in memory, and a btree bulk loader.

This series glues those three together, enabling us to scan the
filesystem for mappings and keep it up to date while other writers run,
and then commit the new btree to disk atomically.

To reduce the size of each patch, the functionality is left disabled
until the end of the series and broken up into three patches: one to
create the mechanics of scanning the filesystem, a second to transition
to in-memory btrees, and a third to set up the live hooks.

This has been running on the djcloud for months with no problems. Enjoy!

Signed-off-by: Darrick J. Wong <djwong@kernel.org>

----------------------------------------------------------------
Darrick J. Wong (5):
xfs: create a helper to decide if a file mapping targets the rt volume
xfs: create agblock bitmap helper to count the number of set regions
xfs: repair the rmapbt
xfs: create a shadow rmap btree during rmap repair
xfs: hook live rmap operations during a repair operation

fs/xfs/Makefile | 1 +
fs/xfs/libxfs/xfs_ag.c | 1 +
fs/xfs/libxfs/xfs_ag.h | 4 +
fs/xfs/libxfs/xfs_bmap.c | 49 +-
fs/xfs/libxfs/xfs_bmap.h | 8 +
fs/xfs/libxfs/xfs_inode_fork.c | 9 +
fs/xfs/libxfs/xfs_inode_fork.h | 1 +
fs/xfs/libxfs/xfs_rmap.c | 199 +++--
fs/xfs/libxfs/xfs_rmap.h | 31 +-
fs/xfs/libxfs/xfs_rmap_btree.c | 163 +++-
fs/xfs/libxfs/xfs_rmap_btree.h | 6 +
fs/xfs/libxfs/xfs_shared.h | 10 +
fs/xfs/scrub/agb_bitmap.h | 5 +
fs/xfs/scrub/bitmap.c | 14 +
fs/xfs/scrub/bitmap.h | 2 +
fs/xfs/scrub/bmap.c | 2 +-
fs/xfs/scrub/common.c | 5 +-
fs/xfs/scrub/common.h | 1 +
fs/xfs/scrub/newbt.c | 12 +-
fs/xfs/scrub/newbt.h | 7 +
fs/xfs/scrub/reap.c | 2 +-
fs/xfs/scrub/repair.c | 59 +-
fs/xfs/scrub/repair.h | 12 +-
fs/xfs/scrub/rmap.c | 11 +-
fs/xfs/scrub/rmap_repair.c | 1697 ++++++++++++++++++++++++++++++++++++++++
fs/xfs/scrub/scrub.c | 6 +-
fs/xfs/scrub/scrub.h | 4 +-
fs/xfs/scrub/trace.c | 1 +
fs/xfs/scrub/trace.h | 80 +-
fs/xfs/xfs_stats.c | 3 +-
fs/xfs/xfs_stats.h | 1 +
31 files changed, 2336 insertions(+), 70 deletions(-)
create mode 100644 fs/xfs/scrub/rmap_repair.c