mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-11-30 07:34:12 +08:00
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:
parent
fa044ae70c
commit
49f0d84ec1
@ -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--;
|
||||
|
@ -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.
|
||||
*/
|
||||
|
@ -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);
|
||||
|
||||
|
@ -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;
|
||||
|
@ -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);
|
||||
|
Loading…
Reference in New Issue
Block a user