Commit eb996b40 authored by Dave Chinner's avatar Dave Chinner Committed by openeuler-sync-bot
Browse files

xfs: convert scrub to use mount-based feature checks

mainline inclusion
from mainline-v5.14-rc4
commit 55fafb31
category: bugfix
bugzilla: https://gitee.com/openeuler/kernel/issues/I4KIAO
CVE: NA

Reference: https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=55fafb31f9e988a4ba2a38fcfe6f507880394d1f



--------------------------------

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: default avatarDave Chinner <dchinner@redhat.com>
Reviewed-by: default avatarDarrick J. Wong <djwong@kernel.org>
Signed-off-by: default avatarDarrick J. Wong <djwong@kernel.org>
Signed-off-by: default avatarLong Li <leo.lilong@huawei.com>
(cherry picked from commit 54fb04f6)
parent f4b6d5bc
Loading
Loading
Loading
Loading
+6 −6
Original line number Diff line number Diff line
@@ -240,21 +240,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 */
@@ -309,14 +309,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 */
@@ -384,7 +384,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;
+1 −1
Original line number Diff line number Diff line
@@ -28,7 +28,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;