From: Darrick J. Wong <djwong@xxxxxxxxxx> 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@xxxxxxxxxx> --- repair/phase6.c | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/repair/phase6.c b/repair/phase6.c index f2358bde194e38..dd17e8a60d05a3 100644 --- a/repair/phase6.c +++ b/repair/phase6.c @@ -474,6 +474,24 @@ 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; + int ino_offset; + + irec = find_inode_rec(mp, XFS_INO_TO_AGNO(mp, ino), + XFS_INO_TO_AGINO(mp, ino)); + ino_offset = get_inode_offset(mp, ino, irec); + set_inode_is_meta(irec, ino_offset); +} + /* Load a realtime freespace metadata inode from disk and reset it. */ static int ensure_rtino( @@ -693,6 +711,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)