diff options
author | Darrick J. Wong <djwong@kernel.org> | 2024-04-15 14:55:06 -0700 |
---|---|---|
committer | Darrick J. Wong <djwong@kernel.org> | 2024-04-15 14:59:00 -0700 |
commit | 1a5f6e08d4e379a23da5be974aee50b26a20c5b0 (patch) | |
tree | f6ccd2cd5461c1760cb13f7bf3bff9087d080e54 /fs/xfs/scrub/common.c | |
parent | 5f204051d998ec3d7306db0d749bddcbf4c97693 (diff) | |
download | linux-stable-1a5f6e08d4e379a23da5be974aee50b26a20c5b0.tar.gz linux-stable-1a5f6e08d4e379a23da5be974aee50b26a20c5b0.tar.bz2 linux-stable-1a5f6e08d4e379a23da5be974aee50b26a20c5b0.zip |
xfs: create subordinate scrub contexts for xchk_metadata_inode_subtype
When a file-based metadata structure is being scrubbed in
xchk_metadata_inode_subtype, we should create an entirely new scrub
context so that each scrubber doesn't trip over another's buffers.
Signed-off-by: Darrick J. Wong <djwong@kernel.org>
Reviewed-by: Christoph Hellwig <hch@lst.de>
Diffstat (limited to 'fs/xfs/scrub/common.c')
-rw-r--r-- | fs/xfs/scrub/common.c | 23 |
1 files changed, 4 insertions, 19 deletions
diff --git a/fs/xfs/scrub/common.c b/fs/xfs/scrub/common.c index a2da2bef509a..48302532d10d 100644 --- a/fs/xfs/scrub/common.c +++ b/fs/xfs/scrub/common.c @@ -1203,27 +1203,12 @@ xchk_metadata_inode_subtype( struct xfs_scrub *sc, unsigned int scrub_type) { - __u32 smtype = sc->sm->sm_type; - unsigned int sick_mask = sc->sick_mask; + struct xfs_scrub_subord *sub; int error; - sc->sm->sm_type = scrub_type; - - switch (scrub_type) { - case XFS_SCRUB_TYPE_INODE: - error = xchk_inode(sc); - break; - case XFS_SCRUB_TYPE_BMBTD: - error = xchk_bmap_data(sc); - break; - default: - ASSERT(0); - error = -EFSCORRUPTED; - break; - } - - sc->sick_mask = sick_mask; - sc->sm->sm_type = smtype; + sub = xchk_scrub_create_subord(sc, scrub_type); + error = sub->sc.ops->scrub(&sub->sc); + xchk_scrub_free_subord(sub); return error; } |