From b26d16875213a6a25cc9194d45e4547a42ded5e1 Mon Sep 17 00:00:00 2001 From: "Darrick J. Wong" Date: Fri, 21 Mar 2025 09:31:46 -0700 Subject: [PATCH] xfs_repair: fix crash in reset_rt_metadir_inodes I observed that xfs_repair -n segfaults during xfs/812 after corrupting the /rtgroups metadir inode because mp->m_rtdirip isn't loaded. Fix the crash and print a warning about the missing inode. Cc: linux-xfs@vger.kernel.org # v6.13.0 Fixes: 7c541c90fd77a2 ("xfs_repair: support realtime groups") Signed-off-by: Darrick J. Wong Reviewed-by: Christoph Hellwig --- repair/phase6.c | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/repair/phase6.c b/repair/phase6.c index 2d526dda..c16164c1 100644 --- a/repair/phase6.c +++ b/repair/phase6.c @@ -3397,15 +3397,21 @@ reset_rt_metadir_inodes( unload_rtgroup_inodes(mp); if (mp->m_sb.sb_rgcount > 0) { - if (!no_modify) { + if (no_modify) { + if (!mp->m_rtdirip) + do_warn(_("would recreate realtime metadir\n")); + } else { error = -libxfs_rtginode_mkdir_parent(mp); if (error) do_error(_("failed to create realtime metadir (%d)\n"), error); } - mark_ino_inuse(mp, mp->m_rtdirip->i_ino, S_IFDIR, - mp->m_metadirip->i_ino); - mark_ino_metadata(mp, mp->m_rtdirip->i_ino); + + if (mp->m_rtdirip) { + mark_ino_inuse(mp, mp->m_rtdirip->i_ino, S_IFDIR, + mp->m_metadirip->i_ino); + mark_ino_metadata(mp, mp->m_rtdirip->i_ino); + } } /* -- 2.47.3