Hi all, 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. If you're going to start using this mess, you probably ought to just pull from my git trees, which are linked below. This is an extraordinary way to destroy everything. Enjoy! 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=repair-rmap-btree xfsprogs git tree: https://git.kernel.org/cgit/linux/kernel/git/djwong/xfsprogs-dev.git/log/?h=repair-rmap-btree fstests git tree: https://git.kernel.org/cgit/linux/kernel/git/djwong/xfstests-dev.git/log/?h=repair-rmap-btree --- fs/xfs/Makefile | 1 fs/xfs/libxfs/xfs_ag.c | 1 fs/xfs/libxfs/xfs_ag.h | 3 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 | 192 +++-- fs/xfs/libxfs/xfs_rmap.h | 30 + fs/xfs/libxfs/xfs_rmap_btree.c | 136 +++ fs/xfs/libxfs/xfs_rmap_btree.h | 9 fs/xfs/scrub/bitmap.c | 14 fs/xfs/scrub/bitmap.h | 5 fs/xfs/scrub/bmap.c | 4 fs/xfs/scrub/common.c | 7 fs/xfs/scrub/common.h | 1 fs/xfs/scrub/newbt.c | 5 fs/xfs/scrub/newbt.h | 6 fs/xfs/scrub/reap.c | 6 fs/xfs/scrub/repair.c | 64 +- fs/xfs/scrub/repair.h | 12 fs/xfs/scrub/rmap.c | 9 fs/xfs/scrub/rmap_repair.c | 1651 ++++++++++++++++++++++++++++++++++++++++ fs/xfs/scrub/scrub.c | 6 fs/xfs/scrub/scrub.h | 4 fs/xfs/scrub/trace.c | 1 fs/xfs/scrub/trace.h | 80 ++ 27 files changed, 2246 insertions(+), 68 deletions(-) create mode 100644 fs/xfs/scrub/rmap_repair.c