Hi all, The design document discusses the need for a specialized inode scan cursor to manage walking every file on a live filesystem to build replacement metadata objects while receiving updates about the files already scanned. This series adds three pieces of infrastructure -- the scan cursor, live hooks to deliver information about updates going on in other parts of the filesystem, and then adds a batching mechanism to amortize AGI lookups over a batch of inodes to improve performance. If you're going to start using this code, I strongly recommend pulling from my git trees, which are linked below. This has been running on the djcloud for months with no problems. 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=scrub-iscan --- Commits in this patchset: * xfs: speed up xfs_iwalk_adjust_start a little bit * xfs: implement live inode scan for scrub * xfs: allow scrub to hook metadata updates in other writers * xfs: stagger the starting AG of scrub iscans to reduce contention * xfs: cache a bunch of inodes for repair scans * xfs: iscan batching should handle unallocated inodes too --- fs/xfs/Kconfig | 5 fs/xfs/Makefile | 2 fs/xfs/scrub/iscan.c | 738 ++++++++++++++++++++++++++++++++++++++++++++++++++ fs/xfs/scrub/iscan.h | 81 +++++ fs/xfs/scrub/trace.c | 1 fs/xfs/scrub/trace.h | 145 ++++++++++ fs/xfs/xfs_hooks.c | 52 ++++ fs/xfs/xfs_hooks.h | 65 ++++ fs/xfs/xfs_iwalk.c | 13 - fs/xfs/xfs_linux.h | 1 10 files changed, 1092 insertions(+), 11 deletions(-) create mode 100644 fs/xfs/scrub/iscan.c create mode 100644 fs/xfs/scrub/iscan.h create mode 100644 fs/xfs/xfs_hooks.c create mode 100644 fs/xfs/xfs_hooks.h