]> www.infradead.org Git - users/hch/xfsprogs.git/commitdiff
xfs_db: basic xfs_check support for metadir
authorDarrick J. Wong <djwong@kernel.org>
Wed, 3 Jul 2024 21:21:50 +0000 (14:21 -0700)
committerDarrick J. Wong <djwong@kernel.org>
Tue, 16 Jul 2024 22:49:11 +0000 (15:49 -0700)
Support metadata directories in xfs_check.

Signed-off-by: Darrick J. Wong <djwong@kernel.org>
db/check.c

index bceaf318d75ed8a7dcaa9b5f25e45a768df197a8..588eed82c4660d247604ed128254e93d515cdf50 100644 (file)
@@ -2663,7 +2663,9 @@ process_dir(
                if (!sflag || id->ilist || CHECK_BLIST(bno))
                        dbprintf(_("no .. entry for directory %lld\n"), id->ino);
                error++;
-       } else if (parent == id->ino && id->ino != mp->m_sb.sb_rootino) {
+       } else if (parent == id->ino &&
+                  id->ino != mp->m_sb.sb_rootino &&
+                  id->ino != mp->m_sb.sb_metadirino) {
                if (!sflag || id->ilist || CHECK_BLIST(bno))
                        dbprintf(_(". and .. same for non-root directory %lld\n"),
                                id->ino);
@@ -2673,6 +2675,11 @@ process_dir(
                        dbprintf(_("root directory %lld has .. %lld\n"), id->ino,
                                parent);
                error++;
+       } else if (id->ino == mp->m_sb.sb_metadirino && id->ino != parent) {
+               if (!sflag || id->ilist || CHECK_BLIST(bno))
+                       dbprintf(_("metadata root directory %lld has .. %lld\n"),
+                               id->ino, parent);
+               error++;
        } else if (parent != NULLFSINO && id->ino != parent)
                addparent_inode(id, parent);
 }
@@ -2916,6 +2923,9 @@ process_inode(
                type = DBM_DIR;
                if (dip->di_format == XFS_DINODE_FMT_LOCAL)
                        break;
+               if (xfs_has_metadir(mp) &&
+                   id->ino == mp->m_sb.sb_metadirino)
+                       addlink_inode(id);
                blkmap = blkmap_alloc(dnextents);
                break;
        case S_IFREG: