]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
xfs: only log freed extents for the current RTG in zoned growfs
authorChristoph Hellwig <hch@lst.de>
Wed, 10 Jun 2026 05:07:21 +0000 (07:07 +0200)
committerCarlos Maiolino <cem@kernel.org>
Wed, 10 Jun 2026 10:21:40 +0000 (12:21 +0200)
Otherwise a power fail or crash during growfs could lead to an
elevated sb_rblocks counter.

Note that the step function is much simpler compared to the classic RT
allocator as zoned RT sections must be aligned to real time group
boundaries.

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

index debbcefdf07f725edf9726cb0fe9b1adc7025166..7a3f97686989dfe4a79c7949fe42370e2ce41126 100644 (file)
@@ -890,8 +890,7 @@ xfs_growfs_rt_sb_fields(
 
 static int
 xfs_growfs_rt_zoned(
-       struct xfs_rtgroup      *rtg,
-       xfs_rfsblock_t          nrblocks)
+       struct xfs_rtgroup      *rtg)
 {
        struct xfs_mount        *mp = rtg_mount(rtg);
        struct xfs_mount        *nmp;
@@ -903,7 +902,8 @@ xfs_growfs_rt_zoned(
         * Calculate new sb and mount fields for this round.  Also ensure the
         * rtg_extents value is uptodate as the rtbitmap code relies on it.
         */
-       nmp = xfs_growfs_rt_alloc_fake_mount(mp, nrblocks,
+       nmp = xfs_growfs_rt_alloc_fake_mount(mp,
+                       xfs_rtgs_to_rfsbs(mp, rtg_rgno(rtg) + 1),
                        mp->m_sb.sb_rextsize);
        if (!nmp)
                return -ENOMEM;
@@ -1226,7 +1226,7 @@ xfs_growfs_rtg(
        }
 
        if (xfs_has_zoned(mp)) {
-               error = xfs_growfs_rt_zoned(rtg, nrblocks);
+               error = xfs_growfs_rt_zoned(rtg);
                goto out_rele;
        }