From: Darrick J. Wong Date: Thu, 21 Nov 2024 00:24:20 +0000 (-0800) Subject: xfs_repair: update incore metadata state whenever we create new files X-Git-Tag: v6.13.0~145 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=1bd352339960919405681f4ab57963d727124eaa;p=thirdparty%2Fxfsprogs-dev.git xfs_repair: update incore metadata state whenever we create new files 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" Reviewed-by: Christoph Hellwig --- diff --git a/repair/phase6.c b/repair/phase6.c index 688eee20..8fa2c3c8 100644 --- a/repair/phase6.c +++ b/repair/phase6.c @@ -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)