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)
|
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--;
|
||||||
|
@ -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.
|
||||||
*/
|
*/
|
||||||
|
@ -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);
|
||||||
|
|
||||||
|
@ -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;
|
||||||
|
@ -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);
|
||||||
|
Loading…
Reference in New Issue
Block a user