]> git-server-git.apps.pok.os.sepia.ceph.com Git - xfsprogs-dev.git/commitdiff
xfs: validate that zoned RT devices are zone aligned
authorChristoph Hellwig <hch@lst.de>
Sun, 22 Feb 2026 22:41:01 +0000 (14:41 -0800)
committerAndrey Albershteyn <aalbersh@kernel.org>
Mon, 2 Mar 2026 09:54:27 +0000 (10:54 +0100)
Source kernel commit: 982d2616a2906113e433fdc0cfcc122f8d1bb60a

Garbage collection assumes all zones contain the full amount of blocks.
Mkfs already ensures this happens, but make the kernel check it as well
to avoid getting into trouble due to fuzzers or mkfs bugs.

Fixes: 2167eaabe2fa ("xfs: define the zoned on-disk format")
Signed-off-by: Christoph Hellwig <hch@lst.de>
Reviewed-by: Darrick J. Wong <djwong@kernel.org>
Signed-off-by: Carlos Maiolino <cem@kernel.org>
libxfs/xfs_sb.c

index dd14c3ab3b59e373d995e49a666309c0e96f94b5..3e2d3c6da196312347fbdf05b94b2fbe44e898fb 100644 (file)
@@ -299,6 +299,21 @@ xfs_validate_rt_geometry(
            sbp->sb_rbmblocks != xfs_expected_rbmblocks(sbp))
                return false;
 
+       if (xfs_sb_is_v5(sbp) &&
+           (sbp->sb_features_incompat & XFS_SB_FEAT_INCOMPAT_ZONED)) {
+               uint32_t                mod;
+
+               /*
+                * Zoned RT devices must be aligned to the RT group size,
+                * because garbage collection assumes that all zones have the
+                * same size to avoid insane complexity if that weren't the
+                * case.
+                */
+               div_u64_rem(sbp->sb_rextents, sbp->sb_rgextents, &mod);
+               if (mod)
+                       return false;
+       }
+
        return true;
 }