xfs: validate feature support when recovering rmap/refcount intents
authorDarrick J. Wong <darrick.wong@oracle.com>
Mon, 30 Nov 2020 00:33:39 +0000 (16:33 -0800)
committerDarrick J. Wong <darrick.wong@oracle.com>
Wed, 9 Dec 2020 17:49:38 +0000 (09:49 -0800)
The rmap, and refcount log intent items were added to support the rmap
and reflink features.  Because these features come with changes to the
ondisk format, the log items aren't tied to a log incompat flag.

However, the log recovery routines don't actually check for those
feature flags.  The kernel has no business replayng an intent item for a
feature that isn't enabled, so check that as part of recovered log item
validation.  (Note that kernels pre-dating rmap and reflink already fail
log recovery on the unknown log item type code.)

Signed-off-by: Darrick J. Wong <darrick.wong@oracle.com>
Reviewed-by: Brian Foster <bfoster@redhat.com>
fs/xfs/xfs_refcount_item.c
fs/xfs/xfs_rmap_item.c

index c24f2da0f795ba0b6e4883cc81c0e6a6bd9b7359..937d482c9be4c8554097a072d365fe1fdfd30abd 100644 (file)
@@ -423,6 +423,9 @@ xfs_cui_validate_phys(
        struct xfs_mount                *mp,
        struct xfs_phys_extent          *refc)
 {
+       if (!xfs_sb_version_hasreflink(&mp->m_sb))
+               return false;
+
        if (refc->pe_flags & ~XFS_REFCOUNT_EXTENT_FLAGS)
                return false;
 
index 6f3250a220937eecb569a938211d9db2213f48a0..9b84017184d9583d21779e493ad2a6ce5fcbeb86 100644 (file)
@@ -466,6 +466,9 @@ xfs_rui_validate_map(
        struct xfs_mount                *mp,
        struct xfs_map_extent           *rmap)
 {
+       if (!xfs_sb_version_hasrmapbt(&mp->m_sb))
+               return false;
+
        if (rmap->me_flags & ~XFS_RMAP_EXTENT_FLAGS)
                return false;