xfs: pass perag to xfs_alloc_get_freelist
authorDave Chinner <dchinner@redhat.com>
Thu, 7 Jul 2022 09:08:01 +0000 (19:08 +1000)
committerDave Chinner <david@fromorbit.com>
Thu, 7 Jul 2022 09:08:01 +0000 (19:08 +1000)
It's available in all callers, so pass it in so that the perag can
be passed further down the stack.

Signed-off-by: Dave Chinner <dchinner@redhat.com>
Reviewed-by: Christoph Hellwig <hch@lst.de>
Reviewed-by: Darrick J. Wong <djwong@kernel.org>
fs/xfs/libxfs/xfs_alloc.c
fs/xfs/libxfs/xfs_alloc.h
fs/xfs/libxfs/xfs_alloc_btree.c
fs/xfs/libxfs/xfs_rmap_btree.c
fs/xfs/scrub/repair.c

index 478dd81e4590e2876e9c555109e8109be9c05977..c0a2c73ec1cf28eec0f5ce9f4a19e506a7553a1b 100644 (file)
@@ -1075,7 +1075,8 @@ xfs_alloc_ag_vextent_small(
            be32_to_cpu(agf->agf_flcount) <= args->minleft)
                goto out;
 
-       error = xfs_alloc_get_freelist(args->tp, args->agbp, &fbno, 0);
+       error = xfs_alloc_get_freelist(args->pag, args->tp, args->agbp,
+                       &fbno, 0);
        if (error)
                goto error;
        if (fbno == NULLAGBLOCK)
@@ -2697,7 +2698,7 @@ xfs_alloc_fix_freelist(
        else
                targs.oinfo = XFS_RMAP_OINFO_AG;
        while (!(flags & XFS_ALLOC_FLAG_NOSHRINK) && pag->pagf_flcount > need) {
-               error = xfs_alloc_get_freelist(tp, agbp, &bno, 0);
+               error = xfs_alloc_get_freelist(pag, tp, agbp, &bno, 0);
                if (error)
                        goto out_agbp_relse;
 
@@ -2767,6 +2768,7 @@ out_no_agbp:
  */
 int
 xfs_alloc_get_freelist(
+       struct xfs_perag        *pag,
        struct xfs_trans        *tp,
        struct xfs_buf          *agbp,
        xfs_agblock_t           *bnop,
@@ -2779,7 +2781,6 @@ xfs_alloc_get_freelist(
        int                     error;
        uint32_t                logflags;
        struct xfs_mount        *mp = tp->t_mountp;
-       struct xfs_perag        *pag;
 
        /*
         * Freelist is empty, give up.
@@ -2807,7 +2808,6 @@ xfs_alloc_get_freelist(
        if (be32_to_cpu(agf->agf_flfirst) == xfs_agfl_size(mp))
                agf->agf_flfirst = 0;
 
-       pag = agbp->b_pag;
        ASSERT(!pag->pagf_agflreset);
        be32_add_cpu(&agf->agf_flcount, -1);
        pag->pagf_flcount--;
index 06e69fe9c95730cf97a4dbd15a9a55630e49c01b..6349f0e5f93d48ddd1af7aa97b020c1964d0c547 100644 (file)
@@ -95,6 +95,8 @@ xfs_extlen_t xfs_alloc_longest_free_extent(struct xfs_perag *pag,
                xfs_extlen_t need, xfs_extlen_t reserved);
 unsigned int xfs_alloc_min_freelist(struct xfs_mount *mp,
                struct xfs_perag *pag);
+int xfs_alloc_get_freelist(struct xfs_perag *pag, struct xfs_trans *tp,
+               struct xfs_buf *agfbp, xfs_agblock_t *bnop, int  btreeblk);
 
 /*
  * Compute and fill in value of m_alloc_maxlevels.
@@ -103,17 +105,6 @@ void
 xfs_alloc_compute_maxlevels(
        struct xfs_mount        *mp);   /* file system mount structure */
 
-/*
- * Get a block from the freelist.
- * Returns with the buffer for the block gotten.
- */
-int                            /* error */
-xfs_alloc_get_freelist(
-       struct xfs_trans *tp,   /* transaction pointer */
-       struct xfs_buf  *agbp,  /* buffer containing the agf structure */
-       xfs_agblock_t   *bnop,  /* block address retrieved from freelist */
-       int             btreeblk); /* destination is a AGF btree */
-
 /*
  * Log the given fields from the agf structure.
  */
index 8c9f73cc0beeb8ba81bcb5380e67992b241e79e5..a2ead80afb39387ef879b15cc93f82e114749409 100644 (file)
@@ -60,8 +60,8 @@ xfs_allocbt_alloc_block(
        xfs_agblock_t           bno;
 
        /* Allocate the new block from the freelist. If we can't, give up.  */
-       error = xfs_alloc_get_freelist(cur->bc_tp, cur->bc_ag.agbp,
-                                      &bno, 1);
+       error = xfs_alloc_get_freelist(cur->bc_ag.pag, cur->bc_tp,
+                       cur->bc_ag.agbp, &bno, 1);
        if (error)
                return error;
 
@@ -71,7 +71,7 @@ xfs_allocbt_alloc_block(
        }
 
        atomic64_inc(&cur->bc_mp->m_allocbt_blks);
-       xfs_extent_busy_reuse(cur->bc_mp, cur->bc_ag.agbp->b_pag, bno, 1, false);
+       xfs_extent_busy_reuse(cur->bc_mp, cur->bc_ag.pag, bno, 1, false);
 
        new->s = cpu_to_be32(bno);
 
index d6d45992fe7b5cb239a287fc031a31b4cdb5052d..fbbbeda1b06df49a7cb33749ce0c7c594751829b 100644 (file)
@@ -90,7 +90,7 @@ xfs_rmapbt_alloc_block(
        xfs_agblock_t           bno;
 
        /* Allocate the new block from the freelist. If we can't, give up.  */
-       error = xfs_alloc_get_freelist(cur->bc_tp, cur->bc_ag.agbp,
+       error = xfs_alloc_get_freelist(pag, cur->bc_tp, cur->bc_ag.agbp,
                                       &bno, 1);
        if (error)
                return error;
index 1c66f7ee628290b62a6c994b6124320645658d5b..cd6c92b070f8e28a8e0c421f31300c89f1ab36c7 100644 (file)
@@ -300,13 +300,13 @@ xrep_alloc_ag_block(
        switch (resv) {
        case XFS_AG_RESV_AGFL:
        case XFS_AG_RESV_RMAPBT:
-               error = xfs_alloc_get_freelist(sc->tp, sc->sa.agf_bp, &bno, 1);
+               error = xfs_alloc_get_freelist(sc->sa.pag, sc->tp,
+                               sc->sa.agf_bp, &bno, 1);
                if (error)
                        return error;
                if (bno == NULLAGBLOCK)
                        return -ENOSPC;
-               xfs_extent_busy_reuse(sc->mp, sc->sa.pag, bno,
-                               1, false);
+               xfs_extent_busy_reuse(sc->mp, sc->sa.pag, bno, 1, false);
                *fsbno = XFS_AGB_TO_FSB(sc->mp, sc->sa.pag->pag_agno, bno);
                if (resv == XFS_AG_RESV_RMAPBT)
                        xfs_ag_resv_rmapbt_alloc(sc->mp, sc->sa.pag->pag_agno);