]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
xfs: split xfs_allocbt_init_cursor
authorChristoph Hellwig <hch@lst.de>
Thu, 22 Feb 2024 20:40:12 +0000 (12:40 -0800)
committerDarrick J. Wong <djwong@kernel.org>
Thu, 22 Feb 2024 20:40:12 +0000 (12:40 -0800)
Split xfs_allocbt_init_cursor into separate routines for the by-bno
and by-cnt btrees to prepare for the removal of the xfs_btnum global
enumeration of btree types.

Signed-off-by: Christoph Hellwig <hch@lst.de>
Reviewed-by: Darrick J. Wong <djwong@kernel.org>
Signed-off-by: Darrick J. Wong <djwong@kernel.org>
fs/xfs/libxfs/xfs_alloc.c
fs/xfs/libxfs/xfs_alloc_btree.c
fs/xfs/libxfs/xfs_alloc_btree.h
fs/xfs/scrub/agheader_repair.c
fs/xfs/scrub/alloc_repair.c
fs/xfs/scrub/common.c
fs/xfs/scrub/repair.c
fs/xfs/scrub/rmap.c
fs/xfs/xfs_discard.c
fs/xfs/xfs_fsmap.c

index 44d4f0da90bade52c59c886b7e245d1155678350..2b74aded4a2c7d7ee85a3a2e5ede0d45c73536db 100644 (file)
@@ -862,8 +862,8 @@ xfs_alloc_cur_setup(
         * attempt a small allocation.
         */
        if (!acur->cnt)
-               acur->cnt = xfs_allocbt_init_cursor(args->mp, args->tp,
-                                       args->agbp, args->pag, XFS_BTNUM_CNT);
+               acur->cnt = xfs_cntbt_init_cursor(args->mp, args->tp,
+                                       args->agbp, args->pag);
        error = xfs_alloc_lookup_ge(acur->cnt, 0, args->maxlen, &i);
        if (error)
                return error;
@@ -872,11 +872,11 @@ xfs_alloc_cur_setup(
         * Allocate the bnobt left and right search cursors.
         */
        if (!acur->bnolt)
-               acur->bnolt = xfs_allocbt_init_cursor(args->mp, args->tp,
-                                       args->agbp, args->pag, XFS_BTNUM_BNO);
+               acur->bnolt = xfs_bnobt_init_cursor(args->mp, args->tp,
+                                       args->agbp, args->pag);
        if (!acur->bnogt)
-               acur->bnogt = xfs_allocbt_init_cursor(args->mp, args->tp,
-                                       args->agbp, args->pag, XFS_BTNUM_BNO);
+               acur->bnogt = xfs_bnobt_init_cursor(args->mp, args->tp,
+                                       args->agbp, args->pag);
        return i == 1 ? 0 : -ENOSPC;
 }
 
@@ -1234,8 +1234,8 @@ xfs_alloc_ag_vextent_exact(
        /*
         * Allocate/initialize a cursor for the by-number freespace btree.
         */
-       bno_cur = xfs_allocbt_init_cursor(args->mp, args->tp, args->agbp,
-                                         args->pag, XFS_BTNUM_BNO);
+       bno_cur = xfs_bnobt_init_cursor(args->mp, args->tp, args->agbp,
+                                         args->pag);
 
        /*
         * Lookup bno and minlen in the btree (minlen is irrelevant, really).
@@ -1295,8 +1295,8 @@ xfs_alloc_ag_vextent_exact(
         * We are allocating agbno for args->len
         * Allocate/initialize a cursor for the by-size btree.
         */
-       cnt_cur = xfs_allocbt_init_cursor(args->mp, args->tp, args->agbp,
-                                       args->pag, XFS_BTNUM_CNT);
+       cnt_cur = xfs_cntbt_init_cursor(args->mp, args->tp, args->agbp,
+                                       args->pag);
        ASSERT(args->agbno + args->len <= be32_to_cpu(agf->agf_length));
        error = xfs_alloc_fixup_trees(cnt_cur, bno_cur, fbno, flen, args->agbno,
                                      args->len, XFSA_FIXUP_BNO_OK);
@@ -1710,8 +1710,8 @@ restart:
        /*
         * Allocate and initialize a cursor for the by-size btree.
         */
-       cnt_cur = xfs_allocbt_init_cursor(args->mp, args->tp, args->agbp,
-                                       args->pag, XFS_BTNUM_CNT);
+       cnt_cur = xfs_cntbt_init_cursor(args->mp, args->tp, args->agbp,
+                                       args->pag);
        bno_cur = NULL;
 
        /*
@@ -1896,8 +1896,8 @@ restart:
        /*
         * Allocate and initialize a cursor for the by-block tree.
         */
-       bno_cur = xfs_allocbt_init_cursor(args->mp, args->tp, args->agbp,
-                                       args->pag, XFS_BTNUM_BNO);
+       bno_cur = xfs_bnobt_init_cursor(args->mp, args->tp, args->agbp,
+                                       args->pag);
        if ((error = xfs_alloc_fixup_trees(cnt_cur, bno_cur, fbno, flen,
                        rbno, rlen, XFSA_FIXUP_CNT_OK)))
                goto error0;
@@ -1971,7 +1971,7 @@ xfs_free_ag_extent(
        /*
         * Allocate and initialize a cursor for the by-block btree.
         */
-       bno_cur = xfs_allocbt_init_cursor(mp, tp, agbp, pag, XFS_BTNUM_BNO);
+       bno_cur = xfs_bnobt_init_cursor(mp, tp, agbp, pag);
        /*
         * Look for a neighboring block on the left (lower block numbers)
         * that is contiguous with this space.
@@ -2045,7 +2045,7 @@ xfs_free_ag_extent(
        /*
         * Now allocate and initialize a cursor for the by-size tree.
         */
-       cnt_cur = xfs_allocbt_init_cursor(mp, tp, agbp, pag, XFS_BTNUM_CNT);
+       cnt_cur = xfs_cntbt_init_cursor(mp, tp, agbp, pag);
        /*
         * Have both left and right contiguous neighbors.
         * Merge all three into a single free block.
@@ -2754,8 +2754,8 @@ xfs_exact_minlen_extent_available(
        xfs_extlen_t            flen;
        int                     error = 0;
 
-       cnt_cur = xfs_allocbt_init_cursor(args->mp, args->tp, agbp,
-                                       args->pag, XFS_BTNUM_CNT);
+       cnt_cur = xfs_cntbt_init_cursor(args->mp, args->tp, agbp,
+                                       args->pag);
        error = xfs_alloc_lookup_ge(cnt_cur, 0, args->minlen, stat);
        if (error)
                goto out;
index e0b0cdd8f344c9a6a808073fa0bbbda83d10bf58..7228634642897ee825f757f2e11c75c71af96efb 100644 (file)
 static struct kmem_cache       *xfs_allocbt_cur_cache;
 
 STATIC struct xfs_btree_cur *
-xfs_allocbt_dup_cursor(
+xfs_bnobt_dup_cursor(
        struct xfs_btree_cur    *cur)
 {
-       return xfs_allocbt_init_cursor(cur->bc_mp, cur->bc_tp,
-                       cur->bc_ag.agbp, cur->bc_ag.pag, cur->bc_btnum);
+       return xfs_bnobt_init_cursor(cur->bc_mp, cur->bc_tp, cur->bc_ag.agbp,
+                       cur->bc_ag.pag);
 }
 
+STATIC struct xfs_btree_cur *
+xfs_cntbt_dup_cursor(
+       struct xfs_btree_cur    *cur)
+{
+       return xfs_cntbt_init_cursor(cur->bc_mp, cur->bc_tp, cur->bc_ag.agbp,
+                       cur->bc_ag.pag);
+}
+
+
 STATIC void
 xfs_allocbt_set_root(
        struct xfs_btree_cur            *cur,
@@ -480,7 +489,7 @@ const struct xfs_btree_ops xfs_bnobt_ops = {
        .statoff                = XFS_STATS_CALC_INDEX(xs_abtb_2),
        .sick_mask              = XFS_SICK_AG_BNOBT,
 
-       .dup_cursor             = xfs_allocbt_dup_cursor,
+       .dup_cursor             = xfs_bnobt_dup_cursor,
        .set_root               = xfs_allocbt_set_root,
        .alloc_block            = xfs_allocbt_alloc_block,
        .free_block             = xfs_allocbt_free_block,
@@ -512,7 +521,7 @@ const struct xfs_btree_ops xfs_cntbt_ops = {
        .statoff                = XFS_STATS_CALC_INDEX(xs_abtc_2),
        .sick_mask              = XFS_SICK_AG_CNTBT,
 
-       .dup_cursor             = xfs_allocbt_dup_cursor,
+       .dup_cursor             = xfs_cntbt_dup_cursor,
        .set_root               = xfs_allocbt_set_root,
        .alloc_block            = xfs_allocbt_alloc_block,
        .free_block             = xfs_allocbt_free_block,
@@ -532,36 +541,53 @@ const struct xfs_btree_ops xfs_cntbt_ops = {
 };
 
 /*
- * Allocate a new allocation btree cursor.
+ * Allocate a new bnobt cursor.
  *
  * For staging cursors tp and agbp are NULL.
  */
 struct xfs_btree_cur *
-xfs_allocbt_init_cursor(
+xfs_bnobt_init_cursor(
        struct xfs_mount        *mp,
        struct xfs_trans        *tp,
        struct xfs_buf          *agbp,
-       struct xfs_perag        *pag,
-       xfs_btnum_t             btnum)
+       struct xfs_perag        *pag)
 {
-       const struct xfs_btree_ops *ops = &xfs_bnobt_ops;
        struct xfs_btree_cur    *cur;
 
-       ASSERT(btnum == XFS_BTNUM_BNO || btnum == XFS_BTNUM_CNT);
+       cur = xfs_btree_alloc_cursor(mp, tp, XFS_BTNUM_BNO, &xfs_bnobt_ops,
+                       mp->m_alloc_maxlevels, xfs_allocbt_cur_cache);
+       cur->bc_ag.pag = xfs_perag_hold(pag);
+       cur->bc_ag.agbp = agbp;
+       if (agbp) {
+               struct xfs_agf          *agf = agbp->b_addr;
+
+               cur->bc_nlevels = be32_to_cpu(agf->agf_bno_level);
+       }
+       return cur;
+}
 
-       if (btnum == XFS_BTNUM_CNT)
-               ops = &xfs_cntbt_ops;
+/*
+ * Allocate a new cntbt cursor.
+ *
+ * For staging cursors tp and agbp are NULL.
+ */
+struct xfs_btree_cur *
+xfs_cntbt_init_cursor(
+       struct xfs_mount        *mp,
+       struct xfs_trans        *tp,
+       struct xfs_buf          *agbp,
+       struct xfs_perag        *pag)
+{
+       struct xfs_btree_cur    *cur;
 
-       cur = xfs_btree_alloc_cursor(mp, tp, btnum, ops, mp->m_alloc_maxlevels,
-                       xfs_allocbt_cur_cache);
+       cur = xfs_btree_alloc_cursor(mp, tp, XFS_BTNUM_CNT, &xfs_cntbt_ops,
+                       mp->m_alloc_maxlevels, xfs_allocbt_cur_cache);
        cur->bc_ag.pag = xfs_perag_hold(pag);
        cur->bc_ag.agbp = agbp;
        if (agbp) {
                struct xfs_agf          *agf = agbp->b_addr;
 
-               cur->bc_nlevels = (btnum == XFS_BTNUM_BNO) ?
-                       be32_to_cpu(agf->agf_bno_level) :
-                       be32_to_cpu(agf->agf_cnt_level);
+               cur->bc_nlevels = be32_to_cpu(agf->agf_cnt_level);
        }
        return cur;
 }
index 1c910862535f7a3436c538b3498be2da73a4d111..155b47f231ab2f8de16f5e0cbf3919b0d4709791 100644 (file)
@@ -47,9 +47,12 @@ struct xbtree_afakeroot;
                 (maxrecs) * sizeof(xfs_alloc_key_t) + \
                 ((index) - 1) * sizeof(xfs_alloc_ptr_t)))
 
-extern struct xfs_btree_cur *xfs_allocbt_init_cursor(struct xfs_mount *mp,
+struct xfs_btree_cur *xfs_bnobt_init_cursor(struct xfs_mount *mp,
                struct xfs_trans *tp, struct xfs_buf *bp,
-               struct xfs_perag *pag, xfs_btnum_t btnum);
+               struct xfs_perag *pag);
+struct xfs_btree_cur *xfs_cntbt_init_cursor(struct xfs_mount *mp,
+               struct xfs_trans *tp, struct xfs_buf *bp,
+               struct xfs_perag *pag);
 extern int xfs_allocbt_maxrecs(struct xfs_mount *, int, int);
 extern xfs_extlen_t xfs_allocbt_calc_size(struct xfs_mount *mp,
                unsigned long long len);
index e4dd4fe84c5f944c991ab1f31eec8c6c971425f6..e2374d05bdd1f4a225b9e41020c793b2e8daa841 100644 (file)
@@ -255,8 +255,7 @@ xrep_agf_calc_from_btrees(
        int                     error;
 
        /* Update the AGF counters from the bnobt. */
-       cur = xfs_allocbt_init_cursor(mp, sc->tp, agf_bp,
-                       sc->sa.pag, XFS_BTNUM_BNO);
+       cur = xfs_bnobt_init_cursor(mp, sc->tp, agf_bp, sc->sa.pag);
        error = xfs_alloc_query_all(cur, xrep_agf_walk_allocbt, &raa);
        if (error)
                goto err;
@@ -269,8 +268,7 @@ xrep_agf_calc_from_btrees(
        agf->agf_longest = cpu_to_be32(raa.longest);
 
        /* Update the AGF counters from the cntbt. */
-       cur = xfs_allocbt_init_cursor(mp, sc->tp, agf_bp,
-                       sc->sa.pag, XFS_BTNUM_CNT);
+       cur = xfs_cntbt_init_cursor(mp, sc->tp, agf_bp, sc->sa.pag);
        error = xfs_btree_count_blocks(cur, &blocks);
        if (error)
                goto err;
@@ -549,16 +547,14 @@ xrep_agfl_collect_blocks(
                goto out_bmp;
 
        /* Find all blocks currently being used by the bnobt. */
-       cur = xfs_allocbt_init_cursor(mp, sc->tp, agf_bp,
-                       sc->sa.pag, XFS_BTNUM_BNO);
+       cur = xfs_bnobt_init_cursor(mp, sc->tp, agf_bp, sc->sa.pag);
        error = xagb_bitmap_set_btblocks(&ra.agmetablocks, cur);
        xfs_btree_del_cursor(cur, error);
        if (error)
                goto out_bmp;
 
        /* Find all blocks currently being used by the cntbt. */
-       cur = xfs_allocbt_init_cursor(mp, sc->tp, agf_bp,
-                       sc->sa.pag, XFS_BTNUM_CNT);
+       cur = xfs_cntbt_init_cursor(mp, sc->tp, agf_bp, sc->sa.pag);
        error = xagb_bitmap_set_btblocks(&ra.agmetablocks, cur);
        xfs_btree_del_cursor(cur, error);
        if (error)
index 0ef27aacbf25cb8dd0f2642267b548a6e1dc2bd1..d421b253923edc25981e92d5835a705cddf309a0 100644 (file)
@@ -735,12 +735,10 @@ xrep_abt_build_new_trees(
        ra->new_cntbt.bload.claim_block = xrep_abt_claim_block;
 
        /* Allocate cursors for the staged btrees. */
-       bno_cur = xfs_allocbt_init_cursor(sc->mp, NULL, NULL, pag,
-                       XFS_BTNUM_BNO);
+       bno_cur = xfs_bnobt_init_cursor(sc->mp, NULL, NULL, pag);
        xfs_btree_stage_afakeroot(bno_cur, &ra->new_bnobt.afake);
 
-       cnt_cur = xfs_allocbt_init_cursor(sc->mp, NULL, NULL, pag,
-                       XFS_BTNUM_CNT);
+       cnt_cur = xfs_cntbt_init_cursor(sc->mp, NULL, NULL, pag);
        xfs_btree_stage_afakeroot(cnt_cur, &ra->new_cntbt.afake);
 
        /* Last chance to abort before we start committing fixes. */
index 689d40578bd5b62b71a0d576d1da3bcfb31cede3..1233a5604c72b158ed22b908c0f87c458664c654 100644 (file)
@@ -590,14 +590,14 @@ xchk_ag_btcur_init(
 
        if (sa->agf_bp) {
                /* Set up a bnobt cursor for cross-referencing. */
-               sa->bno_cur = xfs_allocbt_init_cursor(mp, sc->tp, sa->agf_bp,
-                               sa->pag, XFS_BTNUM_BNO);
+               sa->bno_cur = xfs_bnobt_init_cursor(mp, sc->tp, sa->agf_bp,
+                               sa->pag);
                xchk_ag_btree_del_cursor_if_sick(sc, &sa->bno_cur,
                                XFS_SCRUB_TYPE_BNOBT);
 
                /* Set up a cntbt cursor for cross-referencing. */
-               sa->cnt_cur = xfs_allocbt_init_cursor(mp, sc->tp, sa->agf_bp,
-                               sa->pag, XFS_BTNUM_CNT);
+               sa->cnt_cur = xfs_cntbt_init_cursor(mp, sc->tp, sa->agf_bp,
+                               sa->pag);
                xchk_ag_btree_del_cursor_if_sick(sc, &sa->cnt_cur,
                                XFS_SCRUB_TYPE_CNTBT);
 
index ab510cea96d868da26eb96ab13851870a652068c..078d21598db553fd47657fe574f40854cc5730b1 100644 (file)
@@ -832,10 +832,10 @@ xrep_ag_btcur_init(
        /* Set up a bnobt cursor for cross-referencing. */
        if (sc->sm->sm_type != XFS_SCRUB_TYPE_BNOBT &&
            sc->sm->sm_type != XFS_SCRUB_TYPE_CNTBT) {
-               sa->bno_cur = xfs_allocbt_init_cursor(mp, sc->tp, sa->agf_bp,
-                               sc->sa.pag, XFS_BTNUM_BNO);
-               sa->cnt_cur = xfs_allocbt_init_cursor(mp, sc->tp, sa->agf_bp,
-                               sc->sa.pag, XFS_BTNUM_CNT);
+               sa->bno_cur = xfs_bnobt_init_cursor(mp, sc->tp, sa->agf_bp,
+                               sc->sa.pag);
+               sa->cnt_cur = xfs_cntbt_init_cursor(mp, sc->tp, sa->agf_bp,
+                               sc->sa.pag);
        }
 
        /* Set up a inobt cursor for cross-referencing. */
index c99d1714f283b08e100a9cf50b25ec192834d681..e0550e018584969c5f3e73166ab582581f04e1c4 100644 (file)
@@ -412,8 +412,8 @@ xchk_rmapbt_walk_ag_metadata(
        /* OWN_AG: bnobt, cntbt, rmapbt, and AGFL */
        cur = sc->sa.bno_cur;
        if (!cur)
-               cur = xfs_allocbt_init_cursor(sc->mp, sc->tp, sc->sa.agf_bp,
-                               sc->sa.pag, XFS_BTNUM_BNO);
+               cur = xfs_bnobt_init_cursor(sc->mp, sc->tp, sc->sa.agf_bp,
+                               sc->sa.pag);
        error = xagb_bitmap_set_btblocks(&cr->ag_owned, cur);
        if (cur != sc->sa.bno_cur)
                xfs_btree_del_cursor(cur, error);
@@ -422,8 +422,8 @@ xchk_rmapbt_walk_ag_metadata(
 
        cur = sc->sa.cnt_cur;
        if (!cur)
-               cur = xfs_allocbt_init_cursor(sc->mp, sc->tp, sc->sa.agf_bp,
-                               sc->sa.pag, XFS_BTNUM_CNT);
+               cur = xfs_cntbt_init_cursor(sc->mp, sc->tp, sc->sa.agf_bp,
+                               sc->sa.pag);
        error = xagb_bitmap_set_btblocks(&cr->ag_owned, cur);
        if (cur != sc->sa.cnt_cur)
                xfs_btree_del_cursor(cur, error);
index f0bf1cc985484b9810abb93b8571b31b1ed14afb..268bb734dc0a80454ac19d95c49fbd2cc0f4a68e 100644 (file)
@@ -179,7 +179,7 @@ xfs_trim_gather_extents(
        if (error)
                goto out_trans_cancel;
 
-       cur = xfs_allocbt_init_cursor(mp, tp, agbp, pag, XFS_BTNUM_CNT);
+       cur = xfs_cntbt_init_cursor(mp, tp, agbp, pag);
 
        /*
         * Look up the extent length requested in the AGF and start with it.
index 5a72217f5feb9b990ff3a41d1cb79519cf2b3091..de59eec747657559394d2911727b305c61d443ed 100644 (file)
@@ -763,8 +763,8 @@ xfs_getfsmap_datadev_bnobt_query(
                return xfs_getfsmap_datadev_bnobt_helper(*curpp, &key[1], info);
 
        /* Allocate cursor for this AG and query_range it. */
-       *curpp = xfs_allocbt_init_cursor(tp->t_mountp, tp, info->agf_bp,
-                       info->pag, XFS_BTNUM_BNO);
+       *curpp = xfs_bnobt_init_cursor(tp->t_mountp, tp, info->agf_bp,
+                       info->pag);
        key->ar_startblock = info->low.rm_startblock;
        key[1].ar_startblock = info->high.rm_startblock;
        return xfs_alloc_query_range(*curpp, key, &key[1],