Hi all, Now that we've created the infrastructure to perform live scans of every file in the filesystem and the necessary hook infrastructure to observe live updates, use it to scan directories to compute the correct link counts for files in the filesystem, and reset those link counts. This patchset creates a tailored readdir implementation for scrub because the regular version has to cycle ILOCKs to copy information to userspace. We can't cycle the ILOCK during the nlink scan and we don't need all the other VFS support code (maintaining a readdir cursor and translating XFS structures to VFS structures and back) so it was easier to duplicate the code. 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-nlinks xfsprogs git tree: https://git.kernel.org/cgit/linux/kernel/git/djwong/xfsprogs-dev.git/log/?h=scrub-nlinks fstests git tree: https://git.kernel.org/cgit/linux/kernel/git/djwong/xfstests-dev.git/log/?h=scrub-nlinks --- Commits in this patchset: * xfs: report health of inode link counts * xfs: teach scrub to check file nlinks * xfs: track directory entry updates during live nlinks fsck * xfs: teach repair to fix file nlinks --- fs/xfs/Makefile | 2 fs/xfs/libxfs/xfs_fs.h | 4 fs/xfs/libxfs/xfs_health.h | 4 fs/xfs/scrub/common.c | 3 fs/xfs/scrub/common.h | 1 fs/xfs/scrub/health.c | 1 fs/xfs/scrub/nlinks.c | 930 ++++++++++++++++++++++++++++++++++++++++++ fs/xfs/scrub/nlinks.h | 102 +++++ fs/xfs/scrub/nlinks_repair.c | 223 ++++++++++ fs/xfs/scrub/repair.h | 2 fs/xfs/scrub/scrub.c | 9 fs/xfs/scrub/scrub.h | 5 fs/xfs/scrub/stats.c | 1 fs/xfs/scrub/trace.c | 2 fs/xfs/scrub/trace.h | 183 ++++++++ fs/xfs/xfs_health.c | 1 fs/xfs/xfs_inode.c | 108 +++++ fs/xfs/xfs_inode.h | 31 + fs/xfs/xfs_mount.h | 3 fs/xfs/xfs_super.c | 2 fs/xfs/xfs_symlink.c | 1 21 files changed, 1614 insertions(+), 4 deletions(-) create mode 100644 fs/xfs/scrub/nlinks.c create mode 100644 fs/xfs/scrub/nlinks.h create mode 100644 fs/xfs/scrub/nlinks_repair.c