Commit 8bd0bf57 authored by Darrick J. Wong's avatar Darrick J. Wong

xfs: remove trivial bnobt/inobt scrub helpers

Christoph Hellwig complained about awkward code in the next two repair
patches such as:

	sc->sm->sm_type = XFS_SCRUB_TYPE_BNOBT;
	error = xchk_bnobt(sc);

This is a little silly, so let's export the xchk_{,i}allocbt functions
to the dispatch table in scrub.c directly and get rid of the helpers.
Originally I had planned each btree gets its own separate entry point,
but since repair doesn't work that way, it no longer makes sense to
complicate the call chain that way.
Signed-off-by: default avatarDarrick J. Wong <djwong@kernel.org>
Reviewed-by: default avatarChristoph Hellwig <hch@lst.de>
parent efb43b35
...@@ -138,31 +138,27 @@ xchk_allocbt_rec( ...@@ -138,31 +138,27 @@ xchk_allocbt_rec(
return 0; return 0;
} }
/* Scrub the freespace btrees for some AG. */ /* Scrub one of the freespace btrees for some AG. */
STATIC int int
xchk_allocbt( xchk_allocbt(
struct xfs_scrub *sc, struct xfs_scrub *sc)
xfs_btnum_t which)
{ {
struct xchk_alloc ca = { }; struct xchk_alloc ca = { };
struct xfs_btree_cur *cur; struct xfs_btree_cur *cur;
cur = which == XFS_BTNUM_BNO ? sc->sa.bno_cur : sc->sa.cnt_cur; switch (sc->sm->sm_type) {
return xchk_btree(sc, cur, xchk_allocbt_rec, &XFS_RMAP_OINFO_AG, &ca); case XFS_SCRUB_TYPE_BNOBT:
} cur = sc->sa.bno_cur;
break;
int case XFS_SCRUB_TYPE_CNTBT:
xchk_bnobt( cur = sc->sa.cnt_cur;
struct xfs_scrub *sc) break;
{ default:
return xchk_allocbt(sc, XFS_BTNUM_BNO); ASSERT(0);
} return -EIO;
}
int return xchk_btree(sc, cur, xchk_allocbt_rec, &XFS_RMAP_OINFO_AG, &ca);
xchk_cntbt(
struct xfs_scrub *sc)
{
return xchk_allocbt(sc, XFS_BTNUM_CNT);
} }
/* xref check that the extent is not free */ /* xref check that the extent is not free */
......
...@@ -708,11 +708,10 @@ xchk_iallocbt_xref_rmap_inodes( ...@@ -708,11 +708,10 @@ xchk_iallocbt_xref_rmap_inodes(
xchk_btree_xref_set_corrupt(sc, sc->sa.rmap_cur, 0); xchk_btree_xref_set_corrupt(sc, sc->sa.rmap_cur, 0);
} }
/* Scrub the inode btrees for some AG. */ /* Scrub one of the inode btrees for some AG. */
STATIC int int
xchk_iallocbt( xchk_iallocbt(
struct xfs_scrub *sc, struct xfs_scrub *sc)
xfs_btnum_t which)
{ {
struct xfs_btree_cur *cur; struct xfs_btree_cur *cur;
struct xchk_iallocbt iabt = { struct xchk_iallocbt iabt = {
...@@ -720,9 +719,23 @@ xchk_iallocbt( ...@@ -720,9 +719,23 @@ xchk_iallocbt(
.next_startino = NULLAGINO, .next_startino = NULLAGINO,
.next_cluster_ino = NULLAGINO, .next_cluster_ino = NULLAGINO,
}; };
xfs_btnum_t which;
int error; int error;
cur = which == XFS_BTNUM_INO ? sc->sa.ino_cur : sc->sa.fino_cur; switch (sc->sm->sm_type) {
case XFS_SCRUB_TYPE_INOBT:
cur = sc->sa.ino_cur;
which = XFS_BTNUM_INO;
break;
case XFS_SCRUB_TYPE_FINOBT:
cur = sc->sa.fino_cur;
which = XFS_BTNUM_FINO;
break;
default:
ASSERT(0);
return -EIO;
}
error = xchk_btree(sc, cur, xchk_iallocbt_rec, &XFS_RMAP_OINFO_INOBT, error = xchk_btree(sc, cur, xchk_iallocbt_rec, &XFS_RMAP_OINFO_INOBT,
&iabt); &iabt);
if (error) if (error)
...@@ -743,20 +756,6 @@ xchk_iallocbt( ...@@ -743,20 +756,6 @@ xchk_iallocbt(
return error; return error;
} }
int
xchk_inobt(
struct xfs_scrub *sc)
{
return xchk_iallocbt(sc, XFS_BTNUM_INO);
}
int
xchk_finobt(
struct xfs_scrub *sc)
{
return xchk_iallocbt(sc, XFS_BTNUM_FINO);
}
/* See if an inode btree has (or doesn't have) an inode chunk record. */ /* See if an inode btree has (or doesn't have) an inode chunk record. */
static inline void static inline void
xchk_xref_inode_check( xchk_xref_inode_check(
......
...@@ -238,25 +238,25 @@ static const struct xchk_meta_ops meta_scrub_ops[] = { ...@@ -238,25 +238,25 @@ static const struct xchk_meta_ops meta_scrub_ops[] = {
[XFS_SCRUB_TYPE_BNOBT] = { /* bnobt */ [XFS_SCRUB_TYPE_BNOBT] = { /* bnobt */
.type = ST_PERAG, .type = ST_PERAG,
.setup = xchk_setup_ag_allocbt, .setup = xchk_setup_ag_allocbt,
.scrub = xchk_bnobt, .scrub = xchk_allocbt,
.repair = xrep_notsupported, .repair = xrep_notsupported,
}, },
[XFS_SCRUB_TYPE_CNTBT] = { /* cntbt */ [XFS_SCRUB_TYPE_CNTBT] = { /* cntbt */
.type = ST_PERAG, .type = ST_PERAG,
.setup = xchk_setup_ag_allocbt, .setup = xchk_setup_ag_allocbt,
.scrub = xchk_cntbt, .scrub = xchk_allocbt,
.repair = xrep_notsupported, .repair = xrep_notsupported,
}, },
[XFS_SCRUB_TYPE_INOBT] = { /* inobt */ [XFS_SCRUB_TYPE_INOBT] = { /* inobt */
.type = ST_PERAG, .type = ST_PERAG,
.setup = xchk_setup_ag_iallocbt, .setup = xchk_setup_ag_iallocbt,
.scrub = xchk_inobt, .scrub = xchk_iallocbt,
.repair = xrep_notsupported, .repair = xrep_notsupported,
}, },
[XFS_SCRUB_TYPE_FINOBT] = { /* finobt */ [XFS_SCRUB_TYPE_FINOBT] = { /* finobt */
.type = ST_PERAG, .type = ST_PERAG,
.setup = xchk_setup_ag_iallocbt, .setup = xchk_setup_ag_iallocbt,
.scrub = xchk_finobt, .scrub = xchk_iallocbt,
.has = xfs_has_finobt, .has = xfs_has_finobt,
.repair = xrep_notsupported, .repair = xrep_notsupported,
}, },
......
...@@ -129,10 +129,8 @@ int xchk_superblock(struct xfs_scrub *sc); ...@@ -129,10 +129,8 @@ int xchk_superblock(struct xfs_scrub *sc);
int xchk_agf(struct xfs_scrub *sc); int xchk_agf(struct xfs_scrub *sc);
int xchk_agfl(struct xfs_scrub *sc); int xchk_agfl(struct xfs_scrub *sc);
int xchk_agi(struct xfs_scrub *sc); int xchk_agi(struct xfs_scrub *sc);
int xchk_bnobt(struct xfs_scrub *sc); int xchk_allocbt(struct xfs_scrub *sc);
int xchk_cntbt(struct xfs_scrub *sc); int xchk_iallocbt(struct xfs_scrub *sc);
int xchk_inobt(struct xfs_scrub *sc);
int xchk_finobt(struct xfs_scrub *sc);
int xchk_rmapbt(struct xfs_scrub *sc); int xchk_rmapbt(struct xfs_scrub *sc);
int xchk_refcountbt(struct xfs_scrub *sc); int xchk_refcountbt(struct xfs_scrub *sc);
int xchk_inode(struct xfs_scrub *sc); int xchk_inode(struct xfs_scrub *sc);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment