diff options
Diffstat (limited to 'fs/xfs/libxfs/xfs_alloc.c')
-rw-r--r-- | fs/xfs/libxfs/xfs_alloc.c | 18 |
1 files changed, 6 insertions, 12 deletions
diff --git a/fs/xfs/libxfs/xfs_alloc.c b/fs/xfs/libxfs/xfs_alloc.c index 1dc244d15a75..3db90b707fb2 100644 --- a/fs/xfs/libxfs/xfs_alloc.c +++ b/fs/xfs/libxfs/xfs_alloc.c | |||
@@ -728,7 +728,7 @@ xfs_alloc_ag_vextent( | |||
728 | 728 | ||
729 | ASSERT(args->len >= args->minlen); | 729 | ASSERT(args->len >= args->minlen); |
730 | ASSERT(args->len <= args->maxlen); | 730 | ASSERT(args->len <= args->maxlen); |
731 | ASSERT(!args->wasfromfl || args->resv != XFS_AG_RESV_RMAPBT); | 731 | ASSERT(!args->wasfromfl || args->resv != XFS_AG_RESV_AGFL); |
732 | ASSERT(args->agbno % args->alignment == 0); | 732 | ASSERT(args->agbno % args->alignment == 0); |
733 | 733 | ||
734 | /* if not file data, insert new block into the reverse map btree */ | 734 | /* if not file data, insert new block into the reverse map btree */ |
@@ -1581,7 +1581,6 @@ xfs_alloc_ag_vextent_small( | |||
1581 | int *stat) /* status: 0-freelist, 1-normal/none */ | 1581 | int *stat) /* status: 0-freelist, 1-normal/none */ |
1582 | { | 1582 | { |
1583 | struct xfs_owner_info oinfo; | 1583 | struct xfs_owner_info oinfo; |
1584 | struct xfs_perag *pag; | ||
1585 | int error; | 1584 | int error; |
1586 | xfs_agblock_t fbno; | 1585 | xfs_agblock_t fbno; |
1587 | xfs_extlen_t flen; | 1586 | xfs_extlen_t flen; |
@@ -1600,7 +1599,7 @@ xfs_alloc_ag_vextent_small( | |||
1600 | * freelist. | 1599 | * freelist. |
1601 | */ | 1600 | */ |
1602 | else if (args->minlen == 1 && args->alignment == 1 && | 1601 | else if (args->minlen == 1 && args->alignment == 1 && |
1603 | args->resv != XFS_AG_RESV_RMAPBT && | 1602 | args->resv != XFS_AG_RESV_AGFL && |
1604 | (be32_to_cpu(XFS_BUF_TO_AGF(args->agbp)->agf_flcount) | 1603 | (be32_to_cpu(XFS_BUF_TO_AGF(args->agbp)->agf_flcount) |
1605 | > args->minleft)) { | 1604 | > args->minleft)) { |
1606 | error = xfs_alloc_get_freelist(args->tp, args->agbp, &fbno, 0); | 1605 | error = xfs_alloc_get_freelist(args->tp, args->agbp, &fbno, 0); |
@@ -1633,18 +1632,13 @@ xfs_alloc_ag_vextent_small( | |||
1633 | /* | 1632 | /* |
1634 | * If we're feeding an AGFL block to something that | 1633 | * If we're feeding an AGFL block to something that |
1635 | * doesn't live in the free space, we need to clear | 1634 | * doesn't live in the free space, we need to clear |
1636 | * out the OWN_AG rmap and add the block back to | 1635 | * out the OWN_AG rmap. |
1637 | * the RMAPBT per-AG reservation. | ||
1638 | */ | 1636 | */ |
1639 | xfs_rmap_ag_owner(&oinfo, XFS_RMAP_OWN_AG); | 1637 | xfs_rmap_ag_owner(&oinfo, XFS_RMAP_OWN_AG); |
1640 | error = xfs_rmap_free(args->tp, args->agbp, args->agno, | 1638 | error = xfs_rmap_free(args->tp, args->agbp, args->agno, |
1641 | fbno, 1, &oinfo); | 1639 | fbno, 1, &oinfo); |
1642 | if (error) | 1640 | if (error) |
1643 | goto error0; | 1641 | goto error0; |
1644 | pag = xfs_perag_get(args->mp, args->agno); | ||
1645 | xfs_ag_resv_free_extent(pag, XFS_AG_RESV_RMAPBT, | ||
1646 | args->tp, 1); | ||
1647 | xfs_perag_put(pag); | ||
1648 | 1642 | ||
1649 | *stat = 0; | 1643 | *stat = 0; |
1650 | return 0; | 1644 | return 0; |
@@ -2170,7 +2164,7 @@ xfs_alloc_fix_freelist( | |||
2170 | if (error) | 2164 | if (error) |
2171 | goto out_agbp_relse; | 2165 | goto out_agbp_relse; |
2172 | error = xfs_free_ag_extent(tp, agbp, args->agno, bno, 1, | 2166 | error = xfs_free_ag_extent(tp, agbp, args->agno, bno, 1, |
2173 | &targs.oinfo, XFS_AG_RESV_RMAPBT); | 2167 | &targs.oinfo, XFS_AG_RESV_AGFL); |
2174 | if (error) | 2168 | if (error) |
2175 | goto out_agbp_relse; | 2169 | goto out_agbp_relse; |
2176 | bp = xfs_btree_get_bufs(mp, tp, args->agno, bno, 0); | 2170 | bp = xfs_btree_get_bufs(mp, tp, args->agno, bno, 0); |
@@ -2196,7 +2190,7 @@ xfs_alloc_fix_freelist( | |||
2196 | while (pag->pagf_flcount < need) { | 2190 | while (pag->pagf_flcount < need) { |
2197 | targs.agbno = 0; | 2191 | targs.agbno = 0; |
2198 | targs.maxlen = need - pag->pagf_flcount; | 2192 | targs.maxlen = need - pag->pagf_flcount; |
2199 | targs.resv = XFS_AG_RESV_RMAPBT; | 2193 | targs.resv = XFS_AG_RESV_AGFL; |
2200 | 2194 | ||
2201 | /* Allocate as many blocks as possible at once. */ | 2195 | /* Allocate as many blocks as possible at once. */ |
2202 | error = xfs_alloc_ag_vextent(&targs); | 2196 | error = xfs_alloc_ag_vextent(&targs); |
@@ -2877,7 +2871,7 @@ xfs_free_extent( | |||
2877 | int error; | 2871 | int error; |
2878 | 2872 | ||
2879 | ASSERT(len != 0); | 2873 | ASSERT(len != 0); |
2880 | ASSERT(type != XFS_AG_RESV_RMAPBT); | 2874 | ASSERT(type != XFS_AG_RESV_AGFL); |
2881 | 2875 | ||
2882 | if (XFS_TEST_ERROR(false, mp, | 2876 | if (XFS_TEST_ERROR(false, mp, |
2883 | XFS_ERRTAG_FREE_EXTENT)) | 2877 | XFS_ERRTAG_FREE_EXTENT)) |