]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
xfs: fix the zoned RT growfs check for zone alignment
authorChristoph Hellwig <hch@lst.de>
Tue, 16 Dec 2025 17:30:09 +0000 (18:30 +0100)
committerCarlos Maiolino <cem@kernel.org>
Wed, 17 Dec 2025 09:27:02 +0000 (10:27 +0100)
The grofs code for zoned RT subvolums already tries to check for zone
alignment, but gets it wrong by using the old instead of the new mount
structure.

Fixes: 01b71e64bb87 ("xfs: support growfs on zoned file systems")
Signed-off-by: Christoph Hellwig <hch@lst.de>
Reviewed-by: Darrick J. Wong <djwong@kernel.org>
Cc: stable@vger.kernel.org # v6.15
Signed-off-by: Carlos Maiolino <cem@kernel.org>
fs/xfs/xfs_rtalloc.c

index 6907e871fa1511a70145d09db5bf65b5ec9b8714..e063f4f2f2e6175c7583e24d0f8a61efbfb32dcc 100644 (file)
@@ -1255,12 +1255,10 @@ xfs_growfs_check_rtgeom(
        min_logfsbs = min_t(xfs_extlen_t, xfs_log_calc_minimum_size(nmp),
                        nmp->m_rsumblocks * 2);
 
-       kfree(nmp);
-
        trace_xfs_growfs_check_rtgeom(mp, min_logfsbs);
 
        if (min_logfsbs > mp->m_sb.sb_logblocks)
-               return -EINVAL;
+               goto out_inval;
 
        if (xfs_has_zoned(mp)) {
                uint32_t        gblocks = mp->m_groups[XG_TYPE_RTG].blocks;
@@ -1268,16 +1266,20 @@ xfs_growfs_check_rtgeom(
 
                if (rextsize != 1)
                        return -EINVAL;
-               div_u64_rem(mp->m_sb.sb_rblocks, gblocks, &rem);
+               div_u64_rem(nmp->m_sb.sb_rblocks, gblocks, &rem);
                if (rem) {
                        xfs_warn(mp,
 "new RT volume size (%lld) not aligned to RT group size (%d)",
-                               mp->m_sb.sb_rblocks, gblocks);
-                       return -EINVAL;
+                               nmp->m_sb.sb_rblocks, gblocks);
+                       goto out_inval;
                }
        }
 
+       kfree(nmp);
        return 0;
+out_inval:
+       kfree(nmp);
+       return -EINVAL;
 }
 
 /*