Message ID | 20241231023423.656128-2-leo.lilong@huawei.com (mailing list archive) |
---|---|
State | New |
Headers | show |
Series | xfs: fix two issues regarding mount failures | expand |
On Tue, Dec 31, 2024 at 10:34:22AM +0800, Long Li wrote: > When mounting an xfs disk that incompat with metadir and has no realtime > subvolume, if CONFIG_XFS_RT is not enabled in the kernel, the mount will > fail. During superblock log recovery, since mp->m_sb.sb_rgcount is greater > than 0, updating the last rtag in-core is required, however, without > CONFIG_XFS_RT enabled, xfs_update_last_rtgroup_size() always returns > -EOPNOTSUPP, leading to mount failure. Didn't we fix the xfs_update_last_rtgroup_size stub to return 0? --D > Initializing sb_rgcount as 1 is incorrect in this scenario. If no > realtime subvolume exists, the value of sb_rgcount should be set > to zero. Fix it by initializing sb_rgcount based on the actual number > of realtime blocks. > > Fixes: 87fe4c34a383 ("xfs: create incore realtime group structures") > Signed-off-by: Long Li <leo.lilong@huawei.com> > --- > fs/xfs/libxfs/xfs_sb.c | 2 +- > 1 file changed, 1 insertion(+), 1 deletion(-) > > diff --git a/fs/xfs/libxfs/xfs_sb.c b/fs/xfs/libxfs/xfs_sb.c > index 3b5623611eba..1ea28f04b75a 100644 > --- a/fs/xfs/libxfs/xfs_sb.c > +++ b/fs/xfs/libxfs/xfs_sb.c > @@ -830,7 +830,7 @@ __xfs_sb_from_disk( > to->sb_rsumino = NULLFSINO; > } else { > to->sb_metadirino = NULLFSINO; > - to->sb_rgcount = 1; > + to->sb_rgcount = to->sb_rblocks > 0 ? 1 : 0; > to->sb_rgextents = 0; > } > } > -- > 2.39.2 > >
diff --git a/fs/xfs/libxfs/xfs_sb.c b/fs/xfs/libxfs/xfs_sb.c index 3b5623611eba..1ea28f04b75a 100644 --- a/fs/xfs/libxfs/xfs_sb.c +++ b/fs/xfs/libxfs/xfs_sb.c @@ -830,7 +830,7 @@ __xfs_sb_from_disk( to->sb_rsumino = NULLFSINO; } else { to->sb_metadirino = NULLFSINO; - to->sb_rgcount = 1; + to->sb_rgcount = to->sb_rblocks > 0 ? 1 : 0; to->sb_rgextents = 0; } }
When mounting an xfs disk that incompat with metadir and has no realtime subvolume, if CONFIG_XFS_RT is not enabled in the kernel, the mount will fail. During superblock log recovery, since mp->m_sb.sb_rgcount is greater than 0, updating the last rtag in-core is required, however, without CONFIG_XFS_RT enabled, xfs_update_last_rtgroup_size() always returns -EOPNOTSUPP, leading to mount failure. Initializing sb_rgcount as 1 is incorrect in this scenario. If no realtime subvolume exists, the value of sb_rgcount should be set to zero. Fix it by initializing sb_rgcount based on the actual number of realtime blocks. Fixes: 87fe4c34a383 ("xfs: create incore realtime group structures") Signed-off-by: Long Li <leo.lilong@huawei.com> --- fs/xfs/libxfs/xfs_sb.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)