xfs: convert scrub to use mount-based feature checks
authorDave Chinner <dchinner@redhat.com>
Thu, 19 Aug 2021 01:46:54 +0000 (18:46 -0700)
committerDarrick J. Wong <djwong@kernel.org>
Thu, 19 Aug 2021 17:07:13 +0000 (10:07 -0700)
The scrub feature checks are the last place that the superblock
feature checks are used. Convert them to mount based feature checks.

Signed-off-by: Dave Chinner <dchinner@redhat.com>
Reviewed-by: Darrick J. Wong <djwong@kernel.org>
Signed-off-by: Darrick J. Wong <djwong@kernel.org>
fs/xfs/scrub/scrub.c
fs/xfs/scrub/scrub.h

index 1f4e8fb449558fb47533ebc41343bb53bf487fbe..51e4c61916d209679fb80075cb1f7418749c2516 100644 (file)
@@ -239,21 +239,21 @@ static const struct xchk_meta_ops meta_scrub_ops[] = {
                .type   = ST_PERAG,
                .setup  = xchk_setup_ag_iallocbt,
                .scrub  = xchk_finobt,
-               .has    = xfs_sb_version_hasfinobt,
+               .has    = xfs_has_finobt,
                .repair = xrep_notsupported,
        },
        [XFS_SCRUB_TYPE_RMAPBT] = {     /* rmapbt */
                .type   = ST_PERAG,
                .setup  = xchk_setup_ag_rmapbt,
                .scrub  = xchk_rmapbt,
-               .has    = xfs_sb_version_hasrmapbt,
+               .has    = xfs_has_rmapbt,
                .repair = xrep_notsupported,
        },
        [XFS_SCRUB_TYPE_REFCNTBT] = {   /* refcountbt */
                .type   = ST_PERAG,
                .setup  = xchk_setup_ag_refcountbt,
                .scrub  = xchk_refcountbt,
-               .has    = xfs_sb_version_hasreflink,
+               .has    = xfs_has_reflink,
                .repair = xrep_notsupported,
        },
        [XFS_SCRUB_TYPE_INODE] = {      /* inode record */
@@ -308,14 +308,14 @@ static const struct xchk_meta_ops meta_scrub_ops[] = {
                .type   = ST_FS,
                .setup  = xchk_setup_rt,
                .scrub  = xchk_rtbitmap,
-               .has    = xfs_sb_version_hasrealtime,
+               .has    = xfs_has_realtime,
                .repair = xrep_notsupported,
        },
        [XFS_SCRUB_TYPE_RTSUM] = {      /* realtime summary */
                .type   = ST_FS,
                .setup  = xchk_setup_rt,
                .scrub  = xchk_rtsummary,
-               .has    = xfs_sb_version_hasrealtime,
+               .has    = xfs_has_realtime,
                .repair = xrep_notsupported,
        },
        [XFS_SCRUB_TYPE_UQUOTA] = {     /* user quota */
@@ -383,7 +383,7 @@ xchk_validate_inputs(
        if (ops->setup == NULL || ops->scrub == NULL)
                goto out;
        /* Does this fs even support this type of metadata? */
-       if (ops->has && !ops->has(&mp->m_sb))
+       if (ops->has && !ops->has(mp))
                goto out;
 
        error = -EINVAL;
index c711637d0d06301aefd5f2c26867d2f6567ed76d..80e5026bba44ac719f5047706f9a135b546b2738 100644 (file)
@@ -27,7 +27,7 @@ struct xchk_meta_ops {
        int             (*repair)(struct xfs_scrub *);
 
        /* Decide if we even have this piece of metadata. */
-       bool            (*has)(struct xfs_sb *);
+       bool            (*has)(struct xfs_mount *);
 
        /* type describing required/allowed inputs */
        enum xchk_type  type;