]> git.ipfire.org Git - thirdparty/xfsprogs-dev.git/commitdiff
xfs_repair: update incore metadata state whenever we create new files
authorDarrick J. Wong <djwong@kernel.org>
Thu, 21 Nov 2024 00:24:20 +0000 (16:24 -0800)
committerDarrick J. Wong <djwong@kernel.org>
Tue, 24 Dec 2024 02:01:27 +0000 (18:01 -0800)
Make sure that we update our incore metadata inode bookkeepping whenever
we create new metadata files.  There will be many more of these later.

Signed-off-by: "Darrick J. Wong" <djwong@kernel.org>
Reviewed-by: Christoph Hellwig <hch@lst.de>
repair/phase6.c

index 688eee20bb3e8ead4df36ac4d67f7dbdffd96b66..8fa2c3c8bf04199ea36cbb7c8e39b5892e0d81dc 100644 (file)
@@ -474,6 +474,22 @@ reset_sbroot_ino(
        libxfs_inode_init(tp, &args, ip);
 }
 
+/*
+ * Mark a newly allocated inode as metadata in the incore bitmap.  Callers
+ * must have already called mark_ino_inuse to ensure there is an incore record.
+ */
+static void
+mark_ino_metadata(
+       struct xfs_mount        *mp,
+       xfs_ino_t               ino)
+{
+       struct ino_tree_node    *irec =
+               find_inode_rec(mp, XFS_INO_TO_AGNO(mp, ino),
+                                  XFS_INO_TO_AGINO(mp, ino));
+
+       set_inode_is_meta(irec, get_inode_offset(mp, ino, irec));
+}
+
 /* Load a realtime freespace metadata inode from disk and reset it. */
 static int
 ensure_rtino(
@@ -693,6 +709,7 @@ mk_metadir(
 
        libxfs_trans_ijoin(tp, mp->m_metadirip, 0);
        libxfs_metafile_set_iflag(tp, mp->m_metadirip, XFS_METAFILE_DIR);
+       mark_ino_metadata(mp, mp->m_metadirip->i_ino);
 
        error = -libxfs_trans_commit(tp);
        if (error)