@@ -282,7 +282,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);
@@ -458,9 +458,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
@@ -648,7 +650,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
@@ -86,7 +86,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;
}