Message ID | 20201207182623.GR629293@magnolia (mailing list archive) |
---|---|
State | Accepted, archived |
Headers | show |
Series | None | expand |
On Mon, Dec 07, 2020 at 10:26:23AM -0800, Darrick J. Wong wrote: > From: Darrick J. Wong <darrick.wong@oracle.com> > > 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> > --- > v3.1: drop the feature check for BUI validation for now > --- Reviewed-by: Brian Foster <bfoster@redhat.com> > fs/xfs/xfs_refcount_item.c | 3 +++ > fs/xfs/xfs_rmap_item.c | 3 +++ > 2 files changed, 6 insertions(+) > > diff --git a/fs/xfs/xfs_refcount_item.c b/fs/xfs/xfs_refcount_item.c > index c24f2da0f795..937d482c9be4 100644 > --- a/fs/xfs/xfs_refcount_item.c > +++ b/fs/xfs/xfs_refcount_item.c > @@ -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; > > diff --git a/fs/xfs/xfs_rmap_item.c b/fs/xfs/xfs_rmap_item.c > index 6f3250a22093..9b84017184d9 100644 > --- a/fs/xfs/xfs_rmap_item.c > +++ b/fs/xfs/xfs_rmap_item.c > @@ -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; > >
diff --git a/fs/xfs/xfs_refcount_item.c b/fs/xfs/xfs_refcount_item.c index c24f2da0f795..937d482c9be4 100644 --- a/fs/xfs/xfs_refcount_item.c +++ b/fs/xfs/xfs_refcount_item.c @@ -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; diff --git a/fs/xfs/xfs_rmap_item.c b/fs/xfs/xfs_rmap_item.c index 6f3250a22093..9b84017184d9 100644 --- a/fs/xfs/xfs_rmap_item.c +++ b/fs/xfs/xfs_rmap_item.c @@ -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;