diff options
author | Darrick J. Wong <djwong@kernel.org> | 2022-07-14 11:15:14 -0700 |
---|---|---|
committer | Darrick J. Wong <djwong@kernel.org> | 2022-10-14 14:17:02 -0700 |
commit | 6ce13410d5d60cc0666710ee79cceb8d4dff33b1 (patch) | |
tree | d57b07d3c78c6ec0d56936d127ad89b238806244 | |
parent | 982026b2f6fe7b1a2cd7c5c5e9680894b8557347 (diff) |
xfs: teach nlink scrubber to deal with metadata directory roots
Enhance the inode link count online fsck code alter their behavior when
they detect metadata directory tree roots, just like they do for the
regular root directory.
Signed-off-by: Darrick J. Wong <djwong@kernel.org>
-rw-r--r-- | fs/xfs/scrub/nlinks.c | 12 | ||||
-rw-r--r-- | fs/xfs/scrub/nlinks_repair.c | 2 |
2 files changed, 8 insertions, 6 deletions
diff --git a/fs/xfs/scrub/nlinks.c b/fs/xfs/scrub/nlinks.c index 485735672077..b34dc1a345e8 100644 --- a/fs/xfs/scrub/nlinks.c +++ b/fs/xfs/scrub/nlinks.c @@ -281,7 +281,7 @@ xchk_nlinks_collect_dirent( * Otherwise, increment the number of backrefs pointing back to ino. */ if (dotdot) { - if (dp == sc->mp->m_rootip) + if (dp == sc->mp->m_rootip || dp == sc->mp->m_metadirip) error = xchk_nlinks_update_incore(xnc, ino, 1, 0, 0); else error = xchk_nlinks_update_incore(xnc, ino, 0, 1, 0); @@ -448,9 +448,11 @@ xchk_nlinks_collect( int error; /* Count the rt and quota files that are rooted in the superblock. */ - error = xchk_nlinks_collect_metafiles(xnc); - if (error) - return error; + if (!xfs_has_metadir(sc->mp)) { + error = xchk_nlinks_collect_metafiles(xnc); + if (error) + return error; + } /* * Set up for a potentially lengthy filesystem scan by reducing our @@ -638,7 +640,7 @@ xchk_nlinks_compare_inode( xchk_ino_set_corrupt(sc, ip->i_ino); } - if (ip == sc->mp->m_rootip) { + if (ip == sc->mp->m_rootip || ip == sc->mp->m_metadirip) { /* * For the root of a directory tree, both the '.' and '..' * entries should point to the root directory. The dot entry diff --git a/fs/xfs/scrub/nlinks_repair.c b/fs/xfs/scrub/nlinks_repair.c index d8ec6b16da66..0d9a3679e255 100644 --- a/fs/xfs/scrub/nlinks_repair.c +++ b/fs/xfs/scrub/nlinks_repair.c @@ -85,7 +85,7 @@ xrep_nlinks_is_orphaned( if (obs->parents != 0) return false; - if (ip == mp->m_rootip || ip == sc->orphanage) + if (ip == mp->m_rootip || ip == sc->orphanage || ip == mp->m_metadirip) return false; return actual_nlink != 0; } |