xfs: remove trivial bnobt/inobt scrub helpers
authorDarrick J. Wong <djwong@kernel.org>
Fri, 15 Dec 2023 18:03:31 +0000 (10:03 -0800)
committerDarrick J. Wong <djwong@kernel.org>
Fri, 15 Dec 2023 18:03:31 +0000 (10:03 -0800)
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: Darrick J. Wong <djwong@kernel.org>
Reviewed-by: Christoph Hellwig <hch@lst.de>
fs/xfs/scrub/alloc.c
fs/xfs/scrub/ialloc.c
fs/xfs/scrub/scrub.c
fs/xfs/scrub/scrub.h

index 279af72b1671d91171638115463d0ed93a84c28c..eb8ec47fc129cf96c8b6c38bd62bc723940c5649 100644 (file)
@@ -138,31 +138,27 @@ xchk_allocbt_rec(
        return 0;
 }
 
-/* Scrub the freespace btrees for some AG. */
-STATIC int
+/* Scrub one of the freespace btrees for some AG. */
+int
 xchk_allocbt(
-       struct xfs_scrub        *sc,
-       xfs_btnum_t             which)
+       struct xfs_scrub        *sc)
 {
        struct xchk_alloc       ca = { };
        struct xfs_btree_cur    *cur;
 
-       cur = which == XFS_BTNUM_BNO ? sc->sa.bno_cur : sc->sa.cnt_cur;
-       return xchk_btree(sc, cur, xchk_allocbt_rec, &XFS_RMAP_OINFO_AG, &ca);
-}
-
-int
-xchk_bnobt(
-       struct xfs_scrub        *sc)
-{
-       return xchk_allocbt(sc, XFS_BTNUM_BNO);
-}
+       switch (sc->sm->sm_type) {
+       case XFS_SCRUB_TYPE_BNOBT:
+               cur = sc->sa.bno_cur;
+               break;
+       case XFS_SCRUB_TYPE_CNTBT:
+               cur = sc->sa.cnt_cur;
+               break;
+       default:
+               ASSERT(0);
+               return -EIO;
+       }
 
-int
-xchk_cntbt(
-       struct xfs_scrub        *sc)
-{
-       return xchk_allocbt(sc, XFS_BTNUM_CNT);
+       return xchk_btree(sc, cur, xchk_allocbt_rec, &XFS_RMAP_OINFO_AG, &ca);
 }
 
 /* xref check that the extent is not free */
index fb7bbf47ae5d6a485ae6d8ebd38dbb282ce7fdd6..83d9a29ce91e8b65f8d366535b47eaf6bdc96e08 100644 (file)
@@ -708,11 +708,10 @@ xchk_iallocbt_xref_rmap_inodes(
                xchk_btree_xref_set_corrupt(sc, sc->sa.rmap_cur, 0);
 }
 
-/* Scrub the inode btrees for some AG. */
-STATIC int
+/* Scrub one of the inode btrees for some AG. */
+int
 xchk_iallocbt(
-       struct xfs_scrub        *sc,
-       xfs_btnum_t             which)
+       struct xfs_scrub        *sc)
 {
        struct xfs_btree_cur    *cur;
        struct xchk_iallocbt    iabt = {
@@ -720,9 +719,23 @@ xchk_iallocbt(
                .next_startino  = NULLAGINO,
                .next_cluster_ino = NULLAGINO,
        };
+       xfs_btnum_t             which;
        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,
                        &iabt);
        if (error)
@@ -743,20 +756,6 @@ xchk_iallocbt(
        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. */
 static inline void
 xchk_xref_inode_check(
index 4849efcaa33aea500372195b1027976e6d2b0e58..31fabae588bebc05c6897adf49534c8904fa6e27 100644 (file)
@@ -238,25 +238,25 @@ static const struct xchk_meta_ops meta_scrub_ops[] = {
        [XFS_SCRUB_TYPE_BNOBT] = {      /* bnobt */
                .type   = ST_PERAG,
                .setup  = xchk_setup_ag_allocbt,
-               .scrub  = xchk_bnobt,
+               .scrub  = xchk_allocbt,
                .repair = xrep_notsupported,
        },
        [XFS_SCRUB_TYPE_CNTBT] = {      /* cntbt */
                .type   = ST_PERAG,
                .setup  = xchk_setup_ag_allocbt,
-               .scrub  = xchk_cntbt,
+               .scrub  = xchk_allocbt,
                .repair = xrep_notsupported,
        },
        [XFS_SCRUB_TYPE_INOBT] = {      /* inobt */
                .type   = ST_PERAG,
                .setup  = xchk_setup_ag_iallocbt,
-               .scrub  = xchk_inobt,
+               .scrub  = xchk_iallocbt,
                .repair = xrep_notsupported,
        },
        [XFS_SCRUB_TYPE_FINOBT] = {     /* finobt */
                .type   = ST_PERAG,
                .setup  = xchk_setup_ag_iallocbt,
-               .scrub  = xchk_finobt,
+               .scrub  = xchk_iallocbt,
                .has    = xfs_has_finobt,
                .repair = xrep_notsupported,
        },
index 1ef9c6b4842a13a1085b6e446c2892d96124ba20..a6a1bea4d62b2ce262ed59e6cbfe8509f7f2beda 100644 (file)
@@ -129,10 +129,8 @@ int xchk_superblock(struct xfs_scrub *sc);
 int xchk_agf(struct xfs_scrub *sc);
 int xchk_agfl(struct xfs_scrub *sc);
 int xchk_agi(struct xfs_scrub *sc);
-int xchk_bnobt(struct xfs_scrub *sc);
-int xchk_cntbt(struct xfs_scrub *sc);
-int xchk_inobt(struct xfs_scrub *sc);
-int xchk_finobt(struct xfs_scrub *sc);
+int xchk_allocbt(struct xfs_scrub *sc);
+int xchk_iallocbt(struct xfs_scrub *sc);
 int xchk_rmapbt(struct xfs_scrub *sc);
 int xchk_refcountbt(struct xfs_scrub *sc);
 int xchk_inode(struct xfs_scrub *sc);