]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
xfs: validate that zoned RT devices are zone aligned
authorChristoph Hellwig <hch@lst.de>
Tue, 16 Dec 2025 17:30:08 +0000 (18:30 +0100)
committerCarlos Maiolino <cem@kernel.org>
Wed, 17 Dec 2025 09:27:02 +0000 (10:27 +0100)
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>
Cc: stable@vger.kernel.org # v6.15
Signed-off-by: Carlos Maiolino <cem@kernel.org>
fs/xfs/libxfs/xfs_sb.c

index cdd16dd805d77cf2d876108a1baaed79b6f70f04..94c272a2ae2622bbec57ab24ff347f9579236634 100644 (file)
@@ -301,6 +301,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;
 }