xfs: pass perag to xfs_alloc_get_freelist

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>
This commit is contained in:
Dave Chinner 2022-07-07 19:08:01 +10:00 committed by Dave Chinner
parent fa044ae70c
commit 49f0d84ec1
5 changed files with 13 additions and 22 deletions

View File

@ -1075,7 +1075,8 @@ xfs_alloc_ag_vextent_small(
be32_to_cpu(agf->agf_flcount) <= args->minleft) be32_to_cpu(agf->agf_flcount) <= args->minleft)
goto out; 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) if (error)
goto error; goto error;
if (fbno == NULLAGBLOCK) if (fbno == NULLAGBLOCK)
@ -2697,7 +2698,7 @@ xfs_alloc_fix_freelist(
else else
targs.oinfo = XFS_RMAP_OINFO_AG; targs.oinfo = XFS_RMAP_OINFO_AG;
while (!(flags & XFS_ALLOC_FLAG_NOSHRINK) && pag->pagf_flcount > need) { 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) if (error)
goto out_agbp_relse; goto out_agbp_relse;
@ -2767,6 +2768,7 @@ out_no_agbp:
*/ */
int int
xfs_alloc_get_freelist( xfs_alloc_get_freelist(
struct xfs_perag *pag,
struct xfs_trans *tp, struct xfs_trans *tp,
struct xfs_buf *agbp, struct xfs_buf *agbp,
xfs_agblock_t *bnop, xfs_agblock_t *bnop,
@ -2779,7 +2781,6 @@ xfs_alloc_get_freelist(
int error; int error;
uint32_t logflags; uint32_t logflags;
struct xfs_mount *mp = tp->t_mountp; struct xfs_mount *mp = tp->t_mountp;
struct xfs_perag *pag;
/* /*
* Freelist is empty, give up. * Freelist is empty, give up.
@ -2807,7 +2808,6 @@ xfs_alloc_get_freelist(
if (be32_to_cpu(agf->agf_flfirst) == xfs_agfl_size(mp)) if (be32_to_cpu(agf->agf_flfirst) == xfs_agfl_size(mp))
agf->agf_flfirst = 0; agf->agf_flfirst = 0;
pag = agbp->b_pag;
ASSERT(!pag->pagf_agflreset); ASSERT(!pag->pagf_agflreset);
be32_add_cpu(&agf->agf_flcount, -1); be32_add_cpu(&agf->agf_flcount, -1);
pag->pagf_flcount--; pag->pagf_flcount--;

View 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); xfs_extlen_t need, xfs_extlen_t reserved);
unsigned int xfs_alloc_min_freelist(struct xfs_mount *mp, unsigned int xfs_alloc_min_freelist(struct xfs_mount *mp,
struct xfs_perag *pag); 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. * Compute and fill in value of m_alloc_maxlevels.
@ -103,17 +105,6 @@ void
xfs_alloc_compute_maxlevels( xfs_alloc_compute_maxlevels(
struct xfs_mount *mp); /* file system mount structure */ 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. * Log the given fields from the agf structure.
*/ */

View File

@ -60,8 +60,8 @@ xfs_allocbt_alloc_block(
xfs_agblock_t bno; xfs_agblock_t bno;
/* Allocate the new block from the freelist. If we can't, give up. */ /* 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(cur->bc_ag.pag, cur->bc_tp,
&bno, 1); cur->bc_ag.agbp, &bno, 1);
if (error) if (error)
return error; return error;
@ -71,7 +71,7 @@ xfs_allocbt_alloc_block(
} }
atomic64_inc(&cur->bc_mp->m_allocbt_blks); 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); new->s = cpu_to_be32(bno);

View File

@ -90,7 +90,7 @@ xfs_rmapbt_alloc_block(
xfs_agblock_t bno; xfs_agblock_t bno;
/* Allocate the new block from the freelist. If we can't, give up. */ /* 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); &bno, 1);
if (error) if (error)
return error; return error;

View File

@ -300,13 +300,13 @@ xrep_alloc_ag_block(
switch (resv) { switch (resv) {
case XFS_AG_RESV_AGFL: case XFS_AG_RESV_AGFL:
case XFS_AG_RESV_RMAPBT: 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) if (error)
return error; return error;
if (bno == NULLAGBLOCK) if (bno == NULLAGBLOCK)
return -ENOSPC; return -ENOSPC;
xfs_extent_busy_reuse(sc->mp, sc->sa.pag, bno, xfs_extent_busy_reuse(sc->mp, sc->sa.pag, bno, 1, false);
1, false);
*fsbno = XFS_AGB_TO_FSB(sc->mp, sc->sa.pag->pag_agno, bno); *fsbno = XFS_AGB_TO_FSB(sc->mp, sc->sa.pag->pag_agno, bno);
if (resv == XFS_AG_RESV_RMAPBT) if (resv == XFS_AG_RESV_RMAPBT)
xfs_ag_resv_rmapbt_alloc(sc->mp, sc->sa.pag->pag_agno); xfs_ag_resv_rmapbt_alloc(sc->mp, sc->sa.pag->pag_agno);