xfs: convert scrub to use mount-based feature checks
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>
This commit is contained in:
parent
fe08cc5044
commit
55fafb31f9
|
@ -239,21 +239,21 @@ static const struct xchk_meta_ops meta_scrub_ops[] = {
|
||||||
.type = ST_PERAG,
|
.type = ST_PERAG,
|
||||||
.setup = xchk_setup_ag_iallocbt,
|
.setup = xchk_setup_ag_iallocbt,
|
||||||
.scrub = xchk_finobt,
|
.scrub = xchk_finobt,
|
||||||
.has = xfs_sb_version_hasfinobt,
|
.has = xfs_has_finobt,
|
||||||
.repair = xrep_notsupported,
|
.repair = xrep_notsupported,
|
||||||
},
|
},
|
||||||
[XFS_SCRUB_TYPE_RMAPBT] = { /* rmapbt */
|
[XFS_SCRUB_TYPE_RMAPBT] = { /* rmapbt */
|
||||||
.type = ST_PERAG,
|
.type = ST_PERAG,
|
||||||
.setup = xchk_setup_ag_rmapbt,
|
.setup = xchk_setup_ag_rmapbt,
|
||||||
.scrub = xchk_rmapbt,
|
.scrub = xchk_rmapbt,
|
||||||
.has = xfs_sb_version_hasrmapbt,
|
.has = xfs_has_rmapbt,
|
||||||
.repair = xrep_notsupported,
|
.repair = xrep_notsupported,
|
||||||
},
|
},
|
||||||
[XFS_SCRUB_TYPE_REFCNTBT] = { /* refcountbt */
|
[XFS_SCRUB_TYPE_REFCNTBT] = { /* refcountbt */
|
||||||
.type = ST_PERAG,
|
.type = ST_PERAG,
|
||||||
.setup = xchk_setup_ag_refcountbt,
|
.setup = xchk_setup_ag_refcountbt,
|
||||||
.scrub = xchk_refcountbt,
|
.scrub = xchk_refcountbt,
|
||||||
.has = xfs_sb_version_hasreflink,
|
.has = xfs_has_reflink,
|
||||||
.repair = xrep_notsupported,
|
.repair = xrep_notsupported,
|
||||||
},
|
},
|
||||||
[XFS_SCRUB_TYPE_INODE] = { /* inode record */
|
[XFS_SCRUB_TYPE_INODE] = { /* inode record */
|
||||||
|
@ -308,14 +308,14 @@ static const struct xchk_meta_ops meta_scrub_ops[] = {
|
||||||
.type = ST_FS,
|
.type = ST_FS,
|
||||||
.setup = xchk_setup_rt,
|
.setup = xchk_setup_rt,
|
||||||
.scrub = xchk_rtbitmap,
|
.scrub = xchk_rtbitmap,
|
||||||
.has = xfs_sb_version_hasrealtime,
|
.has = xfs_has_realtime,
|
||||||
.repair = xrep_notsupported,
|
.repair = xrep_notsupported,
|
||||||
},
|
},
|
||||||
[XFS_SCRUB_TYPE_RTSUM] = { /* realtime summary */
|
[XFS_SCRUB_TYPE_RTSUM] = { /* realtime summary */
|
||||||
.type = ST_FS,
|
.type = ST_FS,
|
||||||
.setup = xchk_setup_rt,
|
.setup = xchk_setup_rt,
|
||||||
.scrub = xchk_rtsummary,
|
.scrub = xchk_rtsummary,
|
||||||
.has = xfs_sb_version_hasrealtime,
|
.has = xfs_has_realtime,
|
||||||
.repair = xrep_notsupported,
|
.repair = xrep_notsupported,
|
||||||
},
|
},
|
||||||
[XFS_SCRUB_TYPE_UQUOTA] = { /* user quota */
|
[XFS_SCRUB_TYPE_UQUOTA] = { /* user quota */
|
||||||
|
@ -383,7 +383,7 @@ xchk_validate_inputs(
|
||||||
if (ops->setup == NULL || ops->scrub == NULL)
|
if (ops->setup == NULL || ops->scrub == NULL)
|
||||||
goto out;
|
goto out;
|
||||||
/* Does this fs even support this type of metadata? */
|
/* 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;
|
goto out;
|
||||||
|
|
||||||
error = -EINVAL;
|
error = -EINVAL;
|
||||||
|
|
|
@ -27,7 +27,7 @@ struct xchk_meta_ops {
|
||||||
int (*repair)(struct xfs_scrub *);
|
int (*repair)(struct xfs_scrub *);
|
||||||
|
|
||||||
/* Decide if we even have this piece of metadata. */
|
/* Decide if we even have this piece of metadata. */
|
||||||
bool (*has)(struct xfs_sb *);
|
bool (*has)(struct xfs_mount *);
|
||||||
|
|
||||||
/* type describing required/allowed inputs */
|
/* type describing required/allowed inputs */
|
||||||
enum xchk_type type;
|
enum xchk_type type;
|
||||||
|
|
Loading…
Reference in New Issue