Hi Dave, et. al., This is the 6.3-rc2 rebase of all the online repair code, all the way to the end of part 1. Since the 6.2 deluge, I've incorporated the bits of feedback I've already received. Initial QA of these two deluges completed last Friday, though there are some lingering reclaim hangs in 6.3 ... oddly *after* the VM has unmounted the filesystem. I have also restructured the directory and parent pointer repair code to match more closely the fully-fleshed versions that will appear as part 2 of online repair, in the parent pointers patchset. This enables me to use this branch to QA all the stuff around directory rebuilding (atomic extent swapping, reaping, etc.) and my fork of Allison's branch to QA the directory scanning part without having to port even more of part 1. Speaking of which, I've finished rebasing my fork of the parent pointers patchset, and it is undergoing testing as we speak. --D The following changes since commit 5023db0fd78213c4d9a5e6c027c6f9b55dc1fdc9: xfs: cross-reference rmap records with refcount btrees (2023-03-14 17:44:07 -0700) are available in the Git repository at: git://git.kernel.org/pub/scm/linux/kernel/git/djwong/xfs-linux.git tags/xfile-page-caching_2023-03-14 for you to examine changes up to 67bb67e9a9941400f950d75d77991bf99c54ed05: xfile: implement write caching (2023-03-14 17:44:26 -0700) ---------------------------------------------------------------- xfs: cache xfile pages for better performance This patchset improves the performance of xfile-backed btrees by teaching the buffer cache to directly map pages from the xfile. It also speeds up xfarray operations substantially by implementing a small page cache to avoid repeated kmap/kunmap calls. Collectively, these can reduce the runtime of online repair functions by twenty percent or so. Signed-off-by: Darrick J. Wong <djwong@xxxxxxxxxx> ---------------------------------------------------------------- Darrick J. Wong (177): xfs: cull repair code that will never get used xfs: move the post-repair block reaping code to a separate file xfs: only invalidate blocks if we're going to free them xfs: only allow reaping of per-AG blocks in xrep_reap_extents xfs: use deferred frees to reap old btree blocks xfs: rearrange xrep_reap_block to make future code flow easier xfs: ignore stale buffers when scanning the buffer cache xfs: reap large AG metadata extents when possible xfs: use per-AG bitmaps to reap unused AG metadata blocks during repair xfs: force all buffers to be written during btree bulk load xfs: implement block reservation accounting for btrees we're staging xfs: log EFIs for all btree blocks being used to stage a btree xfs: add debug knobs to control btree bulk load slack factors xfs: move btree bulkload record initialization to ->get_record implementations xfs: constrain dirty buffers while formatting a staged btree xfs: create a big array data structure xfs: enable sorting of xfile-backed arrays xfs: convert xfarray insertion sort to heapsort using scratchpad memory xfs: teach xfile to pass back direct-map pages to caller xfs: speed up xfarray sort by sorting xfile page contents directly xfs: cache pages used for xfarray quicksort convergence xfs: improve xfarray quicksort pivot xfs: get our own reference to inodes that we want to scrub xfs: wrap ilock/iunlock operations on sc->ip xfs: move the realtime summary file scrubber to a separate source file xfs: implement online scrubbing of rtsummary info xfs: always rescan allegedly healthy per-ag metadata after repair xfs: allow the user to cancel repairs before we start writing xfs: don't complain about unfixed metadata when repairs were injected xfs: allow userspace to rebuild metadata structures xfs: clear pagf_agflreset when repairing the AGFL xfs: repair free space btrees xfs: rewrite xfs_icache_inode_is_allocated xfs: repair inode btrees xfs: repair refcount btrees xfs: disable online repair quota helpers when quota not enabled xfs: try to attach dquots to files before repairing them xfs: repair inode records xfs: zap broken inode forks xfs: abort directory parent scrub scans if we encounter a zapped directory xfs: repair obviously broken inode modes xfs: reintroduce reaping of file metadata blocks to xrep_reap_extents xfs: repair inode fork block mapping data structures xfs: refactor repair forcing tests into a repair.c helper xfs: create a ranged query function for refcount btrees xfs: repair problems in CoW forks xfs: repair the inode core and forks of a metadata inode xfs: create a new inode fork block unmap helper xfs: online repair of realtime bitmaps xfs: repair quotas 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: allow blocking notifier chains with filesystem hooks xfs: report the health of quota counts xfs: implement live quotacheck inode scan xfs: track quota updates during live quotacheck xfs: repair cannot update the summary counters when logging quota flags xfs: repair dquots based on live quotacheck results 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 xfs: separate the marking of sick and checked metadata xfs: report fs corruption errors to the health tracking system xfs: report ag header corruption errors to the health tracking system xfs: report block map corruption errors to the health tracking system xfs: report btree block corruption errors to the health system xfs: report dir/attr block corruption errors to the health system xfs: report symlink block corruption errors to the health system xfs: report inode corruption errors to the health system xfs: report quota block corruption errors to the health system xfs: report realtime metadata corruption errors to the health system xfs: report XFS_IS_CORRUPT errors to the health system xfs: add secondary and indirect classes to the health tracking system xfs: remember sick inodes that get inactivated xfs: update health status if we get a clean bill of health xfs: stabilize fs summary counters for online fsck xfs: remove XCHK_REAPING_DISABLED from scrub xfs: repair summary counters xfs: dump xfiles for debugging purposes xfs: teach buftargs to maintain their own buffer hashtable xfs: create buftarg helpers to abstract block_device operations xfs: make GFP_ usage consistent when allocating buftargs xfs: support in-memory buffer cache targets xfs: consolidate btree block freeing tracepoints xfs: consolidate btree block allocation tracepoints xfs: support in-memory btrees xfs: connect in-memory btrees to xfiles xfs: create a helper to decide if a file mapping targets the rt volume xfs: repair the rmapbt xfs: create a shadow rmap btree during rmap repair xfs: hook live rmap operations during a repair operation xfs: set the btree cursor bc_ops in xfs_btree_alloc_cursor xfs: encode the default bc_flags in the btree ops structure xfs: export some of the btree ops structures xfs: initialize btree blocks using btree_ops structure xfs: rename btree block/buffer init functions xfs: btree convert xfs_btree_init_block to xfs_btree_init_buf calls xfs: remove the unnecessary daddr paramter to _init_block xfs: set btree block buffer ops in _init_buf xfs: remove unnecessary fields in xfbtree_config xfs: move lru refs to the btree ops structure xfs: define an in-memory btree for storing refcount bag info during repairs xfs: create refcount bag structure for btree repairs xfs: port refcount repair to the new refcount bag structure xfs: split tracepoint classes for deferred items xfs: clean up bmap log intent item tracepoint callsites xfs: remove xfs_trans_set_bmap_flags xfs: fix xfs_bunmapi to allow unmapping of partial rt extents xfs: hoist freeing of rt data fork extent mappings xfs: add a realtime flag to the bmap update log redo items xfs: support recovering bmap intent items targetting realtime extents xfs: support deferred bmap updates on the attr fork xfs: xfs_bmap_finish_one should map unwritten extents properly xfs: move xfs_symlink_remote.c declarations to xfs_symlink_remote.h xfs: move remote symlink target read function to libxfs xfs: move symlink target write function to libxfs xfs: add a libxfs header file for staging new ioctls xfs: introduce new file range exchange ioctl xfs: create a new helper to return a file's allocation unit xfs: refactor non-power-of-two alignment checks xfs: parameterize all the incompat log feature helpers xfs: create a log incompat flag for atomic extent swapping xfs: introduce a swap-extent log intent item xfs: create deferred log items for extent swapping xfs: enable xlog users to toggle atomic extent swapping xfs: bind the xfs-specific extent swape code to the vfs-generic file exchange code xfs: add error injection to test swapext recovery xfs: port xfs_swap_extents_rmap to our new code xfs: consolidate all of the xfs_swap_extent_forks code xfs: port xfs_swap_extent_forks to use xfs_swapext_req xfs: allow xfs_swap_range to use older extent swap algorithms xfs: remove old swap extents implementation xfs: condense extended attributes after an atomic swap xfs: condense directories after an atomic swap xfs: condense symbolic links after an atomic swap xfs: make atomic extent swapping support realtime files xfs: support non-power-of-two rtextsize with exchange-range xfs: enable atomic swapext feature xfs: hide private inodes from bulkstat and handle functions xfs: create temporary files and directories for online repair xfs: refactor stale buffer scanning for repairs xfs: add the ability to reap entire inode forks xfs: support preallocating and copying content into temporary files xfs: teach the tempfile to support atomic extent swapping xfs: online repair of realtime summaries xfs: add an explicit owner field to xfs_da_args xfs: use the xfs_da_args owner field to set new dir/attr block owner xfs: validate attr leaf buffer owners xfs: validate attr remote value buffer owners xfs: validate dabtree node buffer owners xfs: validate directory leaf buffer owners xfs: validate explicit directory data buffer owners xfs: validate explicit directory block buffer owners xfs: validate explicit directory free block owners xfs: create a blob array data structure xfs: use atomic extent swapping to fix user file fork data xfs: repair extended attributes xfs: scrub should set preen if attr leaf has holes xfs: flag empty xattr leaf blocks for optimization xfs: use i_prev_unlinked to distinguish inodes that are not on the unlinked list xfs: online repair of directories xfs: scan the filesystem to repair a directory dotdot entry xfs: online repair of parent pointers xfs: ask the dentry cache if it knows the parent of a directory xfs: move orphan files to the orphanage xfs: move files to orphanage instead of letting nlinks drop to zero xfs: ensure dentry consistency when the orphanage adopts a file xfs: online repair of symbolic links xfs: create an xattr iteration function for scrub xfs: check AGI unlinked inode buckets xfs: hoist AGI repair context to a heap object xfs: repair AGI unlinked inode bucket lists xfs: map xfile pages directly into xfs_buf xfs: use b_offset to support direct-mapping pages when blocksize < pagesize xfile: implement write caching fs/read_write.c | 2 + fs/remap_range.c | 4 +- fs/xfs/Kconfig | 46 + fs/xfs/Makefile | 53 +- fs/xfs/libxfs/xfs_ag.c | 45 +- fs/xfs/libxfs/xfs_ag.h | 19 +- fs/xfs/libxfs/xfs_ag_resv.c | 2 + fs/xfs/libxfs/xfs_alloc.c | 123 ++- fs/xfs/libxfs/xfs_alloc.h | 2 + fs/xfs/libxfs/xfs_alloc_btree.c | 36 +- fs/xfs/libxfs/xfs_attr.c | 12 +- fs/xfs/libxfs/xfs_attr.h | 2 + fs/xfs/libxfs/xfs_attr_leaf.c | 95 +- fs/xfs/libxfs/xfs_attr_leaf.h | 6 +- fs/xfs/libxfs/xfs_attr_remote.c | 46 +- fs/xfs/libxfs/xfs_bmap.c | 339 +++++-- fs/xfs/libxfs/xfs_bmap.h | 28 +- fs/xfs/libxfs/xfs_bmap_btree.c | 129 ++- fs/xfs/libxfs/xfs_bmap_btree.h | 5 + fs/xfs/libxfs/xfs_btree.c | 330 ++++-- fs/xfs/libxfs/xfs_btree.h | 62 +- fs/xfs/libxfs/xfs_btree_mem.h | 125 +++ fs/xfs/libxfs/xfs_btree_staging.c | 84 +- fs/xfs/libxfs/xfs_btree_staging.h | 34 +- fs/xfs/libxfs/xfs_da_btree.c | 205 +++- fs/xfs/libxfs/xfs_da_btree.h | 3 + fs/xfs/libxfs/xfs_da_format.h | 16 + fs/xfs/libxfs/xfs_defer.c | 7 + fs/xfs/libxfs/xfs_defer.h | 3 +- fs/xfs/libxfs/xfs_dir2.c | 16 +- fs/xfs/libxfs/xfs_dir2.h | 5 + fs/xfs/libxfs/xfs_dir2_block.c | 46 +- fs/xfs/libxfs/xfs_dir2_data.c | 20 +- fs/xfs/libxfs/xfs_dir2_leaf.c | 102 +- fs/xfs/libxfs/xfs_dir2_node.c | 51 +- fs/xfs/libxfs/xfs_dir2_priv.h | 13 +- fs/xfs/libxfs/xfs_dir2_sf.c | 29 +- fs/xfs/libxfs/xfs_errortag.h | 4 +- fs/xfs/libxfs/xfs_format.h | 18 +- fs/xfs/libxfs/xfs_fs.h | 16 +- fs/xfs/libxfs/xfs_fs_staging.h | 105 ++ fs/xfs/libxfs/xfs_health.h | 86 +- fs/xfs/libxfs/xfs_ialloc.c | 98 +- fs/xfs/libxfs/xfs_ialloc.h | 3 + fs/xfs/libxfs/xfs_ialloc_btree.c | 19 +- fs/xfs/libxfs/xfs_iext_tree.c | 23 +- fs/xfs/libxfs/xfs_inode_buf.c | 12 +- fs/xfs/libxfs/xfs_inode_fork.c | 19 + fs/xfs/libxfs/xfs_inode_fork.h | 4 + fs/xfs/libxfs/xfs_log_format.h | 84 +- fs/xfs/libxfs/xfs_log_recover.h | 2 + fs/xfs/libxfs/xfs_refcount.c | 102 +- fs/xfs/libxfs/xfs_refcount.h | 12 + fs/xfs/libxfs/xfs_refcount_btree.c | 26 +- fs/xfs/libxfs/xfs_rmap.c | 275 +++-- fs/xfs/libxfs/xfs_rmap.h | 30 + fs/xfs/libxfs/xfs_rmap_btree.c | 149 ++- fs/xfs/libxfs/xfs_rmap_btree.h | 9 + fs/xfs/libxfs/xfs_rtbitmap.c | 42 +- fs/xfs/libxfs/xfs_sb.c | 5 + fs/xfs/libxfs/xfs_shared.h | 22 +- fs/xfs/libxfs/xfs_swapext.c | 1261 +++++++++++++++++++++++ fs/xfs/libxfs/xfs_swapext.h | 171 ++++ fs/xfs/libxfs/xfs_symlink_remote.c | 226 ++++- fs/xfs/libxfs/xfs_symlink_remote.h | 42 + fs/xfs/libxfs/xfs_trans_space.h | 4 + fs/xfs/libxfs/xfs_types.h | 13 +- fs/xfs/scrub/agheader.c | 40 + fs/xfs/scrub/agheader_repair.c | 673 +++++++++++-- fs/xfs/scrub/alloc.c | 16 +- fs/xfs/scrub/alloc_repair.c | 910 +++++++++++++++++ fs/xfs/scrub/attr.c | 157 ++- fs/xfs/scrub/attr.h | 7 + fs/xfs/scrub/attr_repair.c | 1154 +++++++++++++++++++++ fs/xfs/scrub/bitmap.c | 120 +-- fs/xfs/scrub/bitmap.h | 46 +- fs/xfs/scrub/bmap.c | 33 +- fs/xfs/scrub/bmap_repair.c | 785 +++++++++++++++ fs/xfs/scrub/common.c | 173 +++- fs/xfs/scrub/common.h | 64 +- fs/xfs/scrub/cow_repair.c | 660 ++++++++++++ fs/xfs/scrub/dabtree.c | 24 + fs/xfs/scrub/dabtree.h | 3 + fs/xfs/scrub/dir.c | 53 +- fs/xfs/scrub/dir_repair.c | 1389 +++++++++++++++++++++++++ fs/xfs/scrub/findparent.c | 449 +++++++++ fs/xfs/scrub/findparent.h | 50 + fs/xfs/scrub/fscounters.c | 264 ++++- fs/xfs/scrub/fscounters.h | 20 + fs/xfs/scrub/fscounters_repair.c | 72 ++ fs/xfs/scrub/health.c | 108 +- fs/xfs/scrub/health.h | 1 + fs/xfs/scrub/ialloc_repair.c | 872 ++++++++++++++++ fs/xfs/scrub/inode.c | 25 +- fs/xfs/scrub/inode_repair.c | 1592 +++++++++++++++++++++++++++++ fs/xfs/scrub/iscan.c | 494 +++++++++ fs/xfs/scrub/iscan.h | 63 ++ fs/xfs/scrub/listxattr.c | 310 ++++++ fs/xfs/scrub/listxattr.h | 17 + fs/xfs/scrub/newbt.c | 662 ++++++++++++ fs/xfs/scrub/newbt.h | 79 ++ fs/xfs/scrub/nlinks.c | 962 ++++++++++++++++++ fs/xfs/scrub/nlinks.h | 105 ++ fs/xfs/scrub/nlinks_repair.c | 473 +++++++++ fs/xfs/scrub/orphanage.c | 504 ++++++++++ fs/xfs/scrub/orphanage.h | 79 ++ fs/xfs/scrub/parent.c | 28 +- fs/xfs/scrub/parent_repair.c | 308 ++++++ fs/xfs/scrub/quota.c | 24 +- fs/xfs/scrub/quota.h | 11 + fs/xfs/scrub/quota_repair.c | 405 ++++++++ fs/xfs/scrub/quotacheck.c | 846 ++++++++++++++++ fs/xfs/scrub/quotacheck.h | 76 ++ fs/xfs/scrub/quotacheck_repair.c | 254 +++++ fs/xfs/scrub/rcbag.c | 331 ++++++ fs/xfs/scrub/rcbag.h | 28 + fs/xfs/scrub/rcbag_btree.c | 373 +++++++ fs/xfs/scrub/rcbag_btree.h | 83 ++ fs/xfs/scrub/readdir.c | 6 +- fs/xfs/scrub/reap.c | 1026 +++++++++++++++++++ fs/xfs/scrub/reap.h | 35 + fs/xfs/scrub/refcount.c | 16 +- fs/xfs/scrub/refcount_repair.c | 745 ++++++++++++++ fs/xfs/scrub/repair.c | 938 +++++++++++------ fs/xfs/scrub/repair.h | 179 +++- fs/xfs/scrub/rmap.c | 9 + fs/xfs/scrub/rmap_repair.c | 1688 +++++++++++++++++++++++++++++++ fs/xfs/scrub/rtbitmap.c | 60 +- fs/xfs/scrub/rtbitmap_repair.c | 56 ++ fs/xfs/scrub/rtsummary.c | 274 +++++ fs/xfs/scrub/rtsummary.h | 14 + fs/xfs/scrub/rtsummary_repair.c | 169 ++++ fs/xfs/scrub/scrub.c | 147 ++- fs/xfs/scrub/scrub.h | 48 +- fs/xfs/scrub/symlink.c | 16 +- fs/xfs/scrub/symlink_repair.c | 452 +++++++++ fs/xfs/scrub/tempfile.c | 815 +++++++++++++++ fs/xfs/scrub/tempfile.h | 46 + fs/xfs/scrub/tempswap.h | 23 + fs/xfs/scrub/trace.c | 24 +- fs/xfs/scrub/trace.h | 1953 ++++++++++++++++++++++++++++++++++-- fs/xfs/scrub/xfarray.c | 1108 ++++++++++++++++++++ fs/xfs/scrub/xfarray.h | 185 ++++ fs/xfs/scrub/xfblob.c | 176 ++++ fs/xfs/scrub/xfblob.h | 27 + fs/xfs/scrub/xfbtree.c | 827 +++++++++++++++ fs/xfs/scrub/xfbtree.h | 57 ++ fs/xfs/scrub/xfile.c | 690 +++++++++++++ fs/xfs/scrub/xfile.h | 165 +++ fs/xfs/xfs_acl.c | 2 + fs/xfs/xfs_aops.c | 5 +- fs/xfs/xfs_attr_inactive.c | 4 + fs/xfs/xfs_attr_item.c | 1 + fs/xfs/xfs_attr_list.c | 53 +- fs/xfs/xfs_bmap_item.c | 58 +- fs/xfs/xfs_bmap_util.c | 628 +----------- fs/xfs/xfs_bmap_util.h | 3 - fs/xfs/xfs_buf.c | 352 +++++-- fs/xfs/xfs_buf.h | 109 +- fs/xfs/xfs_buf_xfile.c | 251 +++++ fs/xfs/xfs_buf_xfile.h | 31 + fs/xfs/xfs_dir2_readdir.c | 13 +- fs/xfs/xfs_discard.c | 10 +- fs/xfs/xfs_dquot.c | 30 + fs/xfs/xfs_error.c | 3 + fs/xfs/xfs_export.c | 2 +- fs/xfs/xfs_extent_busy.c | 13 + fs/xfs/xfs_extent_busy.h | 2 + fs/xfs/xfs_file.c | 30 +- fs/xfs/xfs_globals.c | 12 + fs/xfs/xfs_health.c | 202 +++- fs/xfs/xfs_hooks.c | 94 ++ fs/xfs/xfs_hooks.h | 72 ++ fs/xfs/xfs_icache.c | 138 ++- fs/xfs/xfs_inode.c | 406 +++++++- fs/xfs/xfs_inode.h | 65 +- fs/xfs/xfs_ioctl.c | 137 ++- fs/xfs/xfs_ioctl.h | 4 +- fs/xfs/xfs_ioctl32.c | 11 +- fs/xfs/xfs_iomap.c | 19 +- fs/xfs/xfs_iops.c | 1 + fs/xfs/xfs_itable.c | 8 + fs/xfs/xfs_iwalk.c | 18 +- fs/xfs/xfs_linux.h | 7 + fs/xfs/xfs_log.c | 51 +- fs/xfs/xfs_log.h | 10 +- fs/xfs/xfs_log_cil.c | 3 +- fs/xfs/xfs_log_priv.h | 3 +- fs/xfs/xfs_log_recover.c | 8 +- fs/xfs/xfs_mount.c | 16 +- fs/xfs/xfs_mount.h | 12 +- fs/xfs/xfs_qm.c | 31 +- fs/xfs/xfs_qm.h | 16 + fs/xfs/xfs_qm_bhv.c | 1 + fs/xfs/xfs_quota.h | 45 + fs/xfs/xfs_reflink.c | 14 +- fs/xfs/xfs_rtalloc.c | 165 +++ fs/xfs/xfs_rtalloc.h | 8 + fs/xfs/xfs_super.c | 35 +- fs/xfs/xfs_swapext_item.c | 657 ++++++++++++ fs/xfs/xfs_swapext_item.h | 56 ++ fs/xfs/xfs_symlink.c | 200 +--- fs/xfs/xfs_symlink.h | 1 - fs/xfs/xfs_sysctl.h | 2 + fs/xfs/xfs_sysfs.c | 54 + fs/xfs/xfs_trace.c | 6 + fs/xfs/xfs_trace.h | 752 +++++++++++--- fs/xfs/xfs_trans.c | 95 ++ fs/xfs/xfs_trans.h | 5 + fs/xfs/xfs_trans_buf.c | 42 + fs/xfs/xfs_trans_dquot.c | 158 ++- fs/xfs/xfs_xattr.c | 8 +- fs/xfs/xfs_xchgrange.c | 1364 +++++++++++++++++++++++++ fs/xfs/xfs_xchgrange.h | 56 ++ include/linux/fs.h | 1 + 215 files changed, 37142 insertions(+), 2803 deletions(-) create mode 100644 fs/xfs/libxfs/xfs_btree_mem.h create mode 100644 fs/xfs/libxfs/xfs_fs_staging.h create mode 100644 fs/xfs/libxfs/xfs_swapext.c create mode 100644 fs/xfs/libxfs/xfs_swapext.h create mode 100644 fs/xfs/libxfs/xfs_symlink_remote.h create mode 100644 fs/xfs/scrub/alloc_repair.c create mode 100644 fs/xfs/scrub/attr_repair.c create mode 100644 fs/xfs/scrub/bmap_repair.c create mode 100644 fs/xfs/scrub/cow_repair.c create mode 100644 fs/xfs/scrub/dir_repair.c create mode 100644 fs/xfs/scrub/findparent.c create mode 100644 fs/xfs/scrub/findparent.h create mode 100644 fs/xfs/scrub/fscounters.h create mode 100644 fs/xfs/scrub/fscounters_repair.c create mode 100644 fs/xfs/scrub/ialloc_repair.c create mode 100644 fs/xfs/scrub/inode_repair.c create mode 100644 fs/xfs/scrub/iscan.c create mode 100644 fs/xfs/scrub/iscan.h create mode 100644 fs/xfs/scrub/listxattr.c create mode 100644 fs/xfs/scrub/listxattr.h create mode 100644 fs/xfs/scrub/newbt.c create mode 100644 fs/xfs/scrub/newbt.h 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 create mode 100644 fs/xfs/scrub/orphanage.c create mode 100644 fs/xfs/scrub/orphanage.h create mode 100644 fs/xfs/scrub/parent_repair.c create mode 100644 fs/xfs/scrub/quota.h create mode 100644 fs/xfs/scrub/quota_repair.c create mode 100644 fs/xfs/scrub/quotacheck.c create mode 100644 fs/xfs/scrub/quotacheck.h create mode 100644 fs/xfs/scrub/quotacheck_repair.c create mode 100644 fs/xfs/scrub/rcbag.c create mode 100644 fs/xfs/scrub/rcbag.h create mode 100644 fs/xfs/scrub/rcbag_btree.c create mode 100644 fs/xfs/scrub/rcbag_btree.h create mode 100644 fs/xfs/scrub/reap.c create mode 100644 fs/xfs/scrub/reap.h create mode 100644 fs/xfs/scrub/refcount_repair.c create mode 100644 fs/xfs/scrub/rmap_repair.c create mode 100644 fs/xfs/scrub/rtbitmap_repair.c create mode 100644 fs/xfs/scrub/rtsummary.c create mode 100644 fs/xfs/scrub/rtsummary.h create mode 100644 fs/xfs/scrub/rtsummary_repair.c create mode 100644 fs/xfs/scrub/symlink_repair.c create mode 100644 fs/xfs/scrub/tempfile.c create mode 100644 fs/xfs/scrub/tempfile.h create mode 100644 fs/xfs/scrub/tempswap.h create mode 100644 fs/xfs/scrub/xfarray.c create mode 100644 fs/xfs/scrub/xfarray.h create mode 100644 fs/xfs/scrub/xfblob.c create mode 100644 fs/xfs/scrub/xfblob.h create mode 100644 fs/xfs/scrub/xfbtree.c create mode 100644 fs/xfs/scrub/xfbtree.h create mode 100644 fs/xfs/scrub/xfile.c create mode 100644 fs/xfs/scrub/xfile.h create mode 100644 fs/xfs/xfs_buf_xfile.c create mode 100644 fs/xfs/xfs_buf_xfile.h create mode 100644 fs/xfs/xfs_hooks.c create mode 100644 fs/xfs/xfs_hooks.h create mode 100644 fs/xfs/xfs_swapext_item.c create mode 100644 fs/xfs/xfs_swapext_item.h create mode 100644 fs/xfs/xfs_xchgrange.c create mode 100644 fs/xfs/xfs_xchgrange.h