]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
xfs: set the btree cursor bc_ops in xfs_btree_alloc_cursor
authorDarrick J. Wong <djwong@kernel.org>
Thu, 22 Feb 2024 20:33:18 +0000 (12:33 -0800)
committerDarrick J. Wong <djwong@kernel.org>
Thu, 22 Feb 2024 20:33:18 +0000 (12:33 -0800)
This is a precursor to putting more static data in the btree ops structure.

Signed-off-by: Darrick J. Wong <djwong@kernel.org>
Reviewed-by: Christoph Hellwig <hch@lst.de>
fs/xfs/libxfs/xfs_alloc_btree.c
fs/xfs/libxfs/xfs_bmap_btree.c
fs/xfs/libxfs/xfs_btree.h
fs/xfs/libxfs/xfs_ialloc_btree.c
fs/xfs/libxfs/xfs_refcount_btree.c
fs/xfs/libxfs/xfs_rmap_btree.c

index a7032bf0cd37a3e16b1c1d74f1a92eefa12e5189..cdcb2358351c686fc39037a0d97ab28f62b6199e 100644 (file)
@@ -512,18 +512,17 @@ xfs_allocbt_init_common(
 
        ASSERT(btnum == XFS_BTNUM_BNO || btnum == XFS_BTNUM_CNT);
 
-       cur = xfs_btree_alloc_cursor(mp, tp, btnum, mp->m_alloc_maxlevels,
-                       xfs_allocbt_cur_cache);
-       cur->bc_ag.abt.active = false;
-
        if (btnum == XFS_BTNUM_CNT) {
-               cur->bc_ops = &xfs_cntbt_ops;
+               cur = xfs_btree_alloc_cursor(mp, tp, btnum, &xfs_cntbt_ops,
+                               mp->m_alloc_maxlevels, xfs_allocbt_cur_cache);
                cur->bc_statoff = XFS_STATS_CALC_INDEX(xs_abtc_2);
                cur->bc_flags = XFS_BTREE_LASTREC_UPDATE;
        } else {
-               cur->bc_ops = &xfs_bnobt_ops;
+               cur = xfs_btree_alloc_cursor(mp, tp, btnum, &xfs_bnobt_ops,
+                               mp->m_alloc_maxlevels, xfs_allocbt_cur_cache);
                cur->bc_statoff = XFS_STATS_CALC_INDEX(xs_abtb_2);
        }
+       cur->bc_ag.abt.active = false;
 
        cur->bc_ag.pag = xfs_perag_hold(pag);
 
index 71f2d50f782388745efaa93957a641bd365f7f85..19414c7118867b3ab872e1c9e0212b3d30db5166 100644 (file)
@@ -549,11 +549,10 @@ xfs_bmbt_init_common(
 
        ASSERT(whichfork != XFS_COW_FORK);
 
-       cur = xfs_btree_alloc_cursor(mp, tp, XFS_BTNUM_BMAP,
+       cur = xfs_btree_alloc_cursor(mp, tp, XFS_BTNUM_BMAP, &xfs_bmbt_ops,
                        mp->m_bm_maxlevels[whichfork], xfs_bmbt_cur_cache);
        cur->bc_statoff = XFS_STATS_CALC_INDEX(xs_bmbt_2);
 
-       cur->bc_ops = &xfs_bmbt_ops;
        cur->bc_flags = XFS_BTREE_LONG_PTRS | XFS_BTREE_ROOT_IN_INODE;
        if (xfs_has_crc(mp))
                cur->bc_flags |= XFS_BTREE_CRC_BLOCKS;
index 75a0e2c8e115b32dba15465b1ec47fa052686d71..c053fb934dc70f87ab368011b570b8da7e28ca59 100644 (file)
@@ -720,6 +720,7 @@ xfs_btree_alloc_cursor(
        struct xfs_mount        *mp,
        struct xfs_trans        *tp,
        xfs_btnum_t             btnum,
+       const struct xfs_btree_ops *ops,
        uint8_t                 maxlevels,
        struct kmem_cache       *cache)
 {
@@ -728,6 +729,7 @@ xfs_btree_alloc_cursor(
        /* BMBT allocations can come through from non-transactional context. */
        cur = kmem_cache_zalloc(cache,
                        GFP_KERNEL | __GFP_NOLOCKDEP | __GFP_NOFAIL);
+       cur->bc_ops = ops;
        cur->bc_tp = tp;
        cur->bc_mp = mp;
        cur->bc_btnum = btnum;
index 42a5e1f227a05fc9290ce8f5add2ab337110e1d5..8b705cc62d3d30ec1d92a0aa561434dbb77c2239 100644 (file)
@@ -454,14 +454,16 @@ xfs_inobt_init_common(
        struct xfs_mount        *mp = pag->pag_mount;
        struct xfs_btree_cur    *cur;
 
-       cur = xfs_btree_alloc_cursor(mp, tp, btnum,
-                       M_IGEO(mp)->inobt_maxlevels, xfs_inobt_cur_cache);
        if (btnum == XFS_BTNUM_INO) {
+               cur = xfs_btree_alloc_cursor(mp, tp, btnum, &xfs_inobt_ops,
+                               M_IGEO(mp)->inobt_maxlevels,
+                               xfs_inobt_cur_cache);
                cur->bc_statoff = XFS_STATS_CALC_INDEX(xs_ibt_2);
-               cur->bc_ops = &xfs_inobt_ops;
        } else {
+               cur = xfs_btree_alloc_cursor(mp, tp, btnum, &xfs_finobt_ops,
+                               M_IGEO(mp)->inobt_maxlevels,
+                               xfs_inobt_cur_cache);
                cur->bc_statoff = XFS_STATS_CALC_INDEX(xs_fibt_2);
-               cur->bc_ops = &xfs_finobt_ops;
        }
 
        if (xfs_has_crc(mp))
index f904a92d1b590d7cc5e780ee0d72c32b09dbdc92..1eb164816825fd4917e3355a8ad64dfd728e565e 100644 (file)
@@ -353,7 +353,8 @@ xfs_refcountbt_init_common(
        ASSERT(pag->pag_agno < mp->m_sb.sb_agcount);
 
        cur = xfs_btree_alloc_cursor(mp, tp, XFS_BTNUM_REFC,
-                       mp->m_refc_maxlevels, xfs_refcountbt_cur_cache);
+                       &xfs_refcountbt_ops, mp->m_refc_maxlevels,
+                       xfs_refcountbt_cur_cache);
        cur->bc_statoff = XFS_STATS_CALC_INDEX(xs_refcbt_2);
 
        cur->bc_flags |= XFS_BTREE_CRC_BLOCKS;
@@ -361,7 +362,6 @@ xfs_refcountbt_init_common(
        cur->bc_ag.pag = xfs_perag_hold(pag);
        cur->bc_ag.refc.nr_ops = 0;
        cur->bc_ag.refc.shape_changes = 0;
-       cur->bc_ops = &xfs_refcountbt_ops;
        return cur;
 }
 
index 43ff2236f62373a12afa43ddf01663c4f068ddb7..370c36921f65969e9df9a9d1cd53bafaf877c2fc 100644 (file)
@@ -503,11 +503,10 @@ xfs_rmapbt_init_common(
        struct xfs_btree_cur    *cur;
 
        /* Overlapping btree; 2 keys per pointer. */
-       cur = xfs_btree_alloc_cursor(mp, tp, XFS_BTNUM_RMAP,
+       cur = xfs_btree_alloc_cursor(mp, tp, XFS_BTNUM_RMAP, &xfs_rmapbt_ops,
                        mp->m_rmap_maxlevels, xfs_rmapbt_cur_cache);
        cur->bc_flags = XFS_BTREE_CRC_BLOCKS | XFS_BTREE_OVERLAPPING;
        cur->bc_statoff = XFS_STATS_CALC_INDEX(xs_rmap_2);
-       cur->bc_ops = &xfs_rmapbt_ops;
 
        cur->bc_ag.pag = xfs_perag_hold(pag);
        return cur;