From 1bd352339960919405681f4ab57963d727124eaa Mon Sep 17 00:00:00 2001 From: "Darrick J. Wong" Date: Wed, 20 Nov 2024 16:24:20 -0800 Subject: [PATCH] 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 --- repair/phase6.c | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) 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) -- 2.47.3