xfs: clean up busy extent naming
Now that the busy extent tracking has been moved out of the allocation files, clean up the namespace it uses to "xfs_extent_busy" rather than a mix of "xfs_busy" and "xfs_alloc_busy". Signed-off-by: Dave Chinner<dchinner@redhat.com> Reviewed-by: Christoph Hellwig <hch@lst.de> Reviewed-by: Mark Tinguely <tinguely@sgi.com> Signed-off-by: Ben Myers <bpm@sgi.com>
This commit is contained in:
parent
efc27b5259
commit
4ecbfe637c
|
@ -47,7 +47,7 @@ STATIC int xfs_alloc_ag_vextent_near(xfs_alloc_arg_t *);
|
||||||
STATIC int xfs_alloc_ag_vextent_size(xfs_alloc_arg_t *);
|
STATIC int xfs_alloc_ag_vextent_size(xfs_alloc_arg_t *);
|
||||||
STATIC int xfs_alloc_ag_vextent_small(xfs_alloc_arg_t *,
|
STATIC int xfs_alloc_ag_vextent_small(xfs_alloc_arg_t *,
|
||||||
xfs_btree_cur_t *, xfs_agblock_t *, xfs_extlen_t *, int *);
|
xfs_btree_cur_t *, xfs_agblock_t *, xfs_extlen_t *, int *);
|
||||||
STATIC void xfs_alloc_busy_trim(struct xfs_alloc_arg *,
|
STATIC void xfs_extent_busy_trim(struct xfs_alloc_arg *,
|
||||||
xfs_agblock_t, xfs_extlen_t, xfs_agblock_t *, xfs_extlen_t *);
|
xfs_agblock_t, xfs_extlen_t, xfs_agblock_t *, xfs_extlen_t *);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -152,7 +152,7 @@ xfs_alloc_compute_aligned(
|
||||||
xfs_extlen_t len;
|
xfs_extlen_t len;
|
||||||
|
|
||||||
/* Trim busy sections out of found extent */
|
/* Trim busy sections out of found extent */
|
||||||
xfs_alloc_busy_trim(args, foundbno, foundlen, &bno, &len);
|
xfs_extent_busy_trim(args, foundbno, foundlen, &bno, &len);
|
||||||
|
|
||||||
if (args->alignment > 1 && len >= args->minlen) {
|
if (args->alignment > 1 && len >= args->minlen) {
|
||||||
xfs_agblock_t aligned_bno = roundup(bno, args->alignment);
|
xfs_agblock_t aligned_bno = roundup(bno, args->alignment);
|
||||||
|
@ -536,7 +536,7 @@ xfs_alloc_ag_vextent(
|
||||||
if (error)
|
if (error)
|
||||||
return error;
|
return error;
|
||||||
|
|
||||||
ASSERT(!xfs_alloc_busy_search(args->mp, args->agno,
|
ASSERT(!xfs_extent_busy_search(args->mp, args->agno,
|
||||||
args->agbno, args->len));
|
args->agbno, args->len));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -603,7 +603,7 @@ xfs_alloc_ag_vextent_exact(
|
||||||
/*
|
/*
|
||||||
* Check for overlapping busy extents.
|
* Check for overlapping busy extents.
|
||||||
*/
|
*/
|
||||||
xfs_alloc_busy_trim(args, fbno, flen, &tbno, &tlen);
|
xfs_extent_busy_trim(args, fbno, flen, &tbno, &tlen);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Give up if the start of the extent is busy, or the freespace isn't
|
* Give up if the start of the extent is busy, or the freespace isn't
|
||||||
|
@ -1391,7 +1391,7 @@ xfs_alloc_ag_vextent_small(
|
||||||
if (error)
|
if (error)
|
||||||
goto error0;
|
goto error0;
|
||||||
if (fbno != NULLAGBLOCK) {
|
if (fbno != NULLAGBLOCK) {
|
||||||
xfs_alloc_busy_reuse(args->mp, args->agno, fbno, 1,
|
xfs_extent_busy_reuse(args->mp, args->agno, fbno, 1,
|
||||||
args->userdata);
|
args->userdata);
|
||||||
|
|
||||||
if (args->userdata) {
|
if (args->userdata) {
|
||||||
|
@ -2496,7 +2496,7 @@ xfs_free_extent(
|
||||||
|
|
||||||
error = xfs_free_ag_extent(tp, args.agbp, args.agno, args.agbno, len, 0);
|
error = xfs_free_ag_extent(tp, args.agbp, args.agno, args.agbno, len, 0);
|
||||||
if (!error)
|
if (!error)
|
||||||
xfs_alloc_busy_insert(tp, args.agno, args.agbno, len, 0);
|
xfs_extent_busy_insert(tp, args.agno, args.agbno, len, 0);
|
||||||
error0:
|
error0:
|
||||||
xfs_perag_put(args.pag);
|
xfs_perag_put(args.pag);
|
||||||
return error;
|
return error;
|
||||||
|
|
|
@ -94,7 +94,7 @@ xfs_allocbt_alloc_block(
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
xfs_alloc_busy_reuse(cur->bc_mp, cur->bc_private.a.agno, bno, 1, false);
|
xfs_extent_busy_reuse(cur->bc_mp, cur->bc_private.a.agno, bno, 1, false);
|
||||||
|
|
||||||
xfs_trans_agbtree_delta(cur->bc_tp, 1);
|
xfs_trans_agbtree_delta(cur->bc_tp, 1);
|
||||||
new->s = cpu_to_be32(bno);
|
new->s = cpu_to_be32(bno);
|
||||||
|
@ -119,8 +119,8 @@ xfs_allocbt_free_block(
|
||||||
if (error)
|
if (error)
|
||||||
return error;
|
return error;
|
||||||
|
|
||||||
xfs_alloc_busy_insert(cur->bc_tp, be32_to_cpu(agf->agf_seqno), bno, 1,
|
xfs_extent_busy_insert(cur->bc_tp, be32_to_cpu(agf->agf_seqno), bno, 1,
|
||||||
XFS_ALLOC_BUSY_SKIP_DISCARD);
|
XFS_EXTENT_BUSY_SKIP_DISCARD);
|
||||||
xfs_trans_agbtree_delta(cur->bc_tp, -1);
|
xfs_trans_agbtree_delta(cur->bc_tp, -1);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
|
@ -118,7 +118,7 @@ xfs_trim_extents(
|
||||||
* If any blocks in the range are still busy, skip the
|
* If any blocks in the range are still busy, skip the
|
||||||
* discard and try again the next time.
|
* discard and try again the next time.
|
||||||
*/
|
*/
|
||||||
if (xfs_alloc_busy_search(mp, agno, fbno, flen)) {
|
if (xfs_extent_busy_search(mp, agno, fbno, flen)) {
|
||||||
trace_xfs_discard_busy(mp, agno, fbno, flen);
|
trace_xfs_discard_busy(mp, agno, fbno, flen);
|
||||||
goto next_extent;
|
goto next_extent;
|
||||||
}
|
}
|
||||||
|
@ -212,7 +212,7 @@ xfs_discard_extents(
|
||||||
struct xfs_mount *mp,
|
struct xfs_mount *mp,
|
||||||
struct list_head *list)
|
struct list_head *list)
|
||||||
{
|
{
|
||||||
struct xfs_busy_extent *busyp;
|
struct xfs_extent_busy *busyp;
|
||||||
int error = 0;
|
int error = 0;
|
||||||
|
|
||||||
list_for_each_entry(busyp, list, list) {
|
list_for_each_entry(busyp, list, list) {
|
||||||
|
|
|
@ -32,27 +32,27 @@
|
||||||
#include "xfs_trace.h"
|
#include "xfs_trace.h"
|
||||||
|
|
||||||
void
|
void
|
||||||
xfs_alloc_busy_insert(
|
xfs_extent_busy_insert(
|
||||||
struct xfs_trans *tp,
|
struct xfs_trans *tp,
|
||||||
xfs_agnumber_t agno,
|
xfs_agnumber_t agno,
|
||||||
xfs_agblock_t bno,
|
xfs_agblock_t bno,
|
||||||
xfs_extlen_t len,
|
xfs_extlen_t len,
|
||||||
unsigned int flags)
|
unsigned int flags)
|
||||||
{
|
{
|
||||||
struct xfs_busy_extent *new;
|
struct xfs_extent_busy *new;
|
||||||
struct xfs_busy_extent *busyp;
|
struct xfs_extent_busy *busyp;
|
||||||
struct xfs_perag *pag;
|
struct xfs_perag *pag;
|
||||||
struct rb_node **rbp;
|
struct rb_node **rbp;
|
||||||
struct rb_node *parent = NULL;
|
struct rb_node *parent = NULL;
|
||||||
|
|
||||||
new = kmem_zalloc(sizeof(struct xfs_busy_extent), KM_MAYFAIL);
|
new = kmem_zalloc(sizeof(struct xfs_extent_busy), KM_MAYFAIL);
|
||||||
if (!new) {
|
if (!new) {
|
||||||
/*
|
/*
|
||||||
* No Memory! Since it is now not possible to track the free
|
* No Memory! Since it is now not possible to track the free
|
||||||
* block, make this a synchronous transaction to insure that
|
* block, make this a synchronous transaction to insure that
|
||||||
* the block is not reused before this transaction commits.
|
* the block is not reused before this transaction commits.
|
||||||
*/
|
*/
|
||||||
trace_xfs_alloc_busy_enomem(tp->t_mountp, agno, bno, len);
|
trace_xfs_extent_busy_enomem(tp->t_mountp, agno, bno, len);
|
||||||
xfs_trans_set_sync(tp);
|
xfs_trans_set_sync(tp);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -64,14 +64,14 @@ xfs_alloc_busy_insert(
|
||||||
new->flags = flags;
|
new->flags = flags;
|
||||||
|
|
||||||
/* trace before insert to be able to see failed inserts */
|
/* trace before insert to be able to see failed inserts */
|
||||||
trace_xfs_alloc_busy(tp->t_mountp, agno, bno, len);
|
trace_xfs_extent_busy(tp->t_mountp, agno, bno, len);
|
||||||
|
|
||||||
pag = xfs_perag_get(tp->t_mountp, new->agno);
|
pag = xfs_perag_get(tp->t_mountp, new->agno);
|
||||||
spin_lock(&pag->pagb_lock);
|
spin_lock(&pag->pagb_lock);
|
||||||
rbp = &pag->pagb_tree.rb_node;
|
rbp = &pag->pagb_tree.rb_node;
|
||||||
while (*rbp) {
|
while (*rbp) {
|
||||||
parent = *rbp;
|
parent = *rbp;
|
||||||
busyp = rb_entry(parent, struct xfs_busy_extent, rb_node);
|
busyp = rb_entry(parent, struct xfs_extent_busy, rb_node);
|
||||||
|
|
||||||
if (new->bno < busyp->bno) {
|
if (new->bno < busyp->bno) {
|
||||||
rbp = &(*rbp)->rb_left;
|
rbp = &(*rbp)->rb_left;
|
||||||
|
@ -95,14 +95,14 @@ xfs_alloc_busy_insert(
|
||||||
/*
|
/*
|
||||||
* Search for a busy extent within the range of the extent we are about to
|
* Search for a busy extent within the range of the extent we are about to
|
||||||
* allocate. You need to be holding the busy extent tree lock when calling
|
* allocate. You need to be holding the busy extent tree lock when calling
|
||||||
* xfs_alloc_busy_search(). This function returns 0 for no overlapping busy
|
* xfs_extent_busy_search(). This function returns 0 for no overlapping busy
|
||||||
* extent, -1 for an overlapping but not exact busy extent, and 1 for an exact
|
* extent, -1 for an overlapping but not exact busy extent, and 1 for an exact
|
||||||
* match. This is done so that a non-zero return indicates an overlap that
|
* match. This is done so that a non-zero return indicates an overlap that
|
||||||
* will require a synchronous transaction, but it can still be
|
* will require a synchronous transaction, but it can still be
|
||||||
* used to distinguish between a partial or exact match.
|
* used to distinguish between a partial or exact match.
|
||||||
*/
|
*/
|
||||||
int
|
int
|
||||||
xfs_alloc_busy_search(
|
xfs_extent_busy_search(
|
||||||
struct xfs_mount *mp,
|
struct xfs_mount *mp,
|
||||||
xfs_agnumber_t agno,
|
xfs_agnumber_t agno,
|
||||||
xfs_agblock_t bno,
|
xfs_agblock_t bno,
|
||||||
|
@ -110,7 +110,7 @@ xfs_alloc_busy_search(
|
||||||
{
|
{
|
||||||
struct xfs_perag *pag;
|
struct xfs_perag *pag;
|
||||||
struct rb_node *rbp;
|
struct rb_node *rbp;
|
||||||
struct xfs_busy_extent *busyp;
|
struct xfs_extent_busy *busyp;
|
||||||
int match = 0;
|
int match = 0;
|
||||||
|
|
||||||
pag = xfs_perag_get(mp, agno);
|
pag = xfs_perag_get(mp, agno);
|
||||||
|
@ -120,7 +120,7 @@ xfs_alloc_busy_search(
|
||||||
|
|
||||||
/* find closest start bno overlap */
|
/* find closest start bno overlap */
|
||||||
while (rbp) {
|
while (rbp) {
|
||||||
busyp = rb_entry(rbp, struct xfs_busy_extent, rb_node);
|
busyp = rb_entry(rbp, struct xfs_extent_busy, rb_node);
|
||||||
if (bno < busyp->bno) {
|
if (bno < busyp->bno) {
|
||||||
/* may overlap, but exact start block is lower */
|
/* may overlap, but exact start block is lower */
|
||||||
if (bno + len > busyp->bno)
|
if (bno + len > busyp->bno)
|
||||||
|
@ -154,10 +154,10 @@ xfs_alloc_busy_search(
|
||||||
* needs to be restarted.
|
* needs to be restarted.
|
||||||
*/
|
*/
|
||||||
STATIC bool
|
STATIC bool
|
||||||
xfs_alloc_busy_update_extent(
|
xfs_extent_busy_update_extent(
|
||||||
struct xfs_mount *mp,
|
struct xfs_mount *mp,
|
||||||
struct xfs_perag *pag,
|
struct xfs_perag *pag,
|
||||||
struct xfs_busy_extent *busyp,
|
struct xfs_extent_busy *busyp,
|
||||||
xfs_agblock_t fbno,
|
xfs_agblock_t fbno,
|
||||||
xfs_extlen_t flen,
|
xfs_extlen_t flen,
|
||||||
bool userdata)
|
bool userdata)
|
||||||
|
@ -171,7 +171,7 @@ xfs_alloc_busy_update_extent(
|
||||||
* performing the discard a chance to mark the extent unbusy
|
* performing the discard a chance to mark the extent unbusy
|
||||||
* and retry.
|
* and retry.
|
||||||
*/
|
*/
|
||||||
if (busyp->flags & XFS_ALLOC_BUSY_DISCARDED) {
|
if (busyp->flags & XFS_EXTENT_BUSY_DISCARDED) {
|
||||||
spin_unlock(&pag->pagb_lock);
|
spin_unlock(&pag->pagb_lock);
|
||||||
delay(1);
|
delay(1);
|
||||||
spin_lock(&pag->pagb_lock);
|
spin_lock(&pag->pagb_lock);
|
||||||
|
@ -285,13 +285,13 @@ xfs_alloc_busy_update_extent(
|
||||||
ASSERT(0);
|
ASSERT(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
trace_xfs_alloc_busy_reuse(mp, pag->pag_agno, fbno, flen);
|
trace_xfs_extent_busy_reuse(mp, pag->pag_agno, fbno, flen);
|
||||||
return true;
|
return true;
|
||||||
|
|
||||||
out_force_log:
|
out_force_log:
|
||||||
spin_unlock(&pag->pagb_lock);
|
spin_unlock(&pag->pagb_lock);
|
||||||
xfs_log_force(mp, XFS_LOG_SYNC);
|
xfs_log_force(mp, XFS_LOG_SYNC);
|
||||||
trace_xfs_alloc_busy_force(mp, pag->pag_agno, fbno, flen);
|
trace_xfs_extent_busy_force(mp, pag->pag_agno, fbno, flen);
|
||||||
spin_lock(&pag->pagb_lock);
|
spin_lock(&pag->pagb_lock);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
@ -301,7 +301,7 @@ out_force_log:
|
||||||
* For a given extent [fbno, flen], make sure we can reuse it safely.
|
* For a given extent [fbno, flen], make sure we can reuse it safely.
|
||||||
*/
|
*/
|
||||||
void
|
void
|
||||||
xfs_alloc_busy_reuse(
|
xfs_extent_busy_reuse(
|
||||||
struct xfs_mount *mp,
|
struct xfs_mount *mp,
|
||||||
xfs_agnumber_t agno,
|
xfs_agnumber_t agno,
|
||||||
xfs_agblock_t fbno,
|
xfs_agblock_t fbno,
|
||||||
|
@ -318,8 +318,8 @@ xfs_alloc_busy_reuse(
|
||||||
restart:
|
restart:
|
||||||
rbp = pag->pagb_tree.rb_node;
|
rbp = pag->pagb_tree.rb_node;
|
||||||
while (rbp) {
|
while (rbp) {
|
||||||
struct xfs_busy_extent *busyp =
|
struct xfs_extent_busy *busyp =
|
||||||
rb_entry(rbp, struct xfs_busy_extent, rb_node);
|
rb_entry(rbp, struct xfs_extent_busy, rb_node);
|
||||||
xfs_agblock_t bbno = busyp->bno;
|
xfs_agblock_t bbno = busyp->bno;
|
||||||
xfs_agblock_t bend = bbno + busyp->length;
|
xfs_agblock_t bend = bbno + busyp->length;
|
||||||
|
|
||||||
|
@ -331,7 +331,7 @@ restart:
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!xfs_alloc_busy_update_extent(mp, pag, busyp, fbno, flen,
|
if (!xfs_extent_busy_update_extent(mp, pag, busyp, fbno, flen,
|
||||||
userdata))
|
userdata))
|
||||||
goto restart;
|
goto restart;
|
||||||
}
|
}
|
||||||
|
@ -346,7 +346,7 @@ restart:
|
||||||
* code needs to force out the log and retry the allocation.
|
* code needs to force out the log and retry the allocation.
|
||||||
*/
|
*/
|
||||||
STATIC void
|
STATIC void
|
||||||
xfs_alloc_busy_trim(
|
xfs_extent_busy_trim(
|
||||||
struct xfs_alloc_arg *args,
|
struct xfs_alloc_arg *args,
|
||||||
xfs_agblock_t bno,
|
xfs_agblock_t bno,
|
||||||
xfs_extlen_t len,
|
xfs_extlen_t len,
|
||||||
|
@ -365,8 +365,8 @@ restart:
|
||||||
flen = len;
|
flen = len;
|
||||||
rbp = args->pag->pagb_tree.rb_node;
|
rbp = args->pag->pagb_tree.rb_node;
|
||||||
while (rbp && flen >= args->minlen) {
|
while (rbp && flen >= args->minlen) {
|
||||||
struct xfs_busy_extent *busyp =
|
struct xfs_extent_busy *busyp =
|
||||||
rb_entry(rbp, struct xfs_busy_extent, rb_node);
|
rb_entry(rbp, struct xfs_extent_busy, rb_node);
|
||||||
xfs_agblock_t fend = fbno + flen;
|
xfs_agblock_t fend = fbno + flen;
|
||||||
xfs_agblock_t bbno = busyp->bno;
|
xfs_agblock_t bbno = busyp->bno;
|
||||||
xfs_agblock_t bend = bbno + busyp->length;
|
xfs_agblock_t bend = bbno + busyp->length;
|
||||||
|
@ -384,8 +384,8 @@ restart:
|
||||||
* extent instead of trimming the allocation.
|
* extent instead of trimming the allocation.
|
||||||
*/
|
*/
|
||||||
if (!args->userdata &&
|
if (!args->userdata &&
|
||||||
!(busyp->flags & XFS_ALLOC_BUSY_DISCARDED)) {
|
!(busyp->flags & XFS_EXTENT_BUSY_DISCARDED)) {
|
||||||
if (!xfs_alloc_busy_update_extent(args->mp, args->pag,
|
if (!xfs_extent_busy_update_extent(args->mp, args->pag,
|
||||||
busyp, fbno, flen,
|
busyp, fbno, flen,
|
||||||
false))
|
false))
|
||||||
goto restart;
|
goto restart;
|
||||||
|
@ -517,7 +517,7 @@ restart:
|
||||||
spin_unlock(&args->pag->pagb_lock);
|
spin_unlock(&args->pag->pagb_lock);
|
||||||
|
|
||||||
if (fbno != bno || flen != len) {
|
if (fbno != bno || flen != len) {
|
||||||
trace_xfs_alloc_busy_trim(args->mp, args->agno, bno, len,
|
trace_xfs_extent_busy_trim(args->mp, args->agno, bno, len,
|
||||||
fbno, flen);
|
fbno, flen);
|
||||||
}
|
}
|
||||||
*rbno = fbno;
|
*rbno = fbno;
|
||||||
|
@ -529,19 +529,19 @@ fail:
|
||||||
* re-check if the trimmed extent satisfies the minlen requirement.
|
* re-check if the trimmed extent satisfies the minlen requirement.
|
||||||
*/
|
*/
|
||||||
spin_unlock(&args->pag->pagb_lock);
|
spin_unlock(&args->pag->pagb_lock);
|
||||||
trace_xfs_alloc_busy_trim(args->mp, args->agno, bno, len, fbno, 0);
|
trace_xfs_extent_busy_trim(args->mp, args->agno, bno, len, fbno, 0);
|
||||||
*rbno = fbno;
|
*rbno = fbno;
|
||||||
*rlen = 0;
|
*rlen = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
STATIC void
|
||||||
xfs_alloc_busy_clear_one(
|
xfs_extent_busy_clear_one(
|
||||||
struct xfs_mount *mp,
|
struct xfs_mount *mp,
|
||||||
struct xfs_perag *pag,
|
struct xfs_perag *pag,
|
||||||
struct xfs_busy_extent *busyp)
|
struct xfs_extent_busy *busyp)
|
||||||
{
|
{
|
||||||
if (busyp->length) {
|
if (busyp->length) {
|
||||||
trace_xfs_alloc_busy_clear(mp, busyp->agno, busyp->bno,
|
trace_xfs_extent_busy_clear(mp, busyp->agno, busyp->bno,
|
||||||
busyp->length);
|
busyp->length);
|
||||||
rb_erase(&busyp->rb_node, &pag->pagb_tree);
|
rb_erase(&busyp->rb_node, &pag->pagb_tree);
|
||||||
}
|
}
|
||||||
|
@ -556,12 +556,12 @@ xfs_alloc_busy_clear_one(
|
||||||
* these as undergoing a discard operation instead.
|
* these as undergoing a discard operation instead.
|
||||||
*/
|
*/
|
||||||
void
|
void
|
||||||
xfs_alloc_busy_clear(
|
xfs_extent_busy_clear(
|
||||||
struct xfs_mount *mp,
|
struct xfs_mount *mp,
|
||||||
struct list_head *list,
|
struct list_head *list,
|
||||||
bool do_discard)
|
bool do_discard)
|
||||||
{
|
{
|
||||||
struct xfs_busy_extent *busyp, *n;
|
struct xfs_extent_busy *busyp, *n;
|
||||||
struct xfs_perag *pag = NULL;
|
struct xfs_perag *pag = NULL;
|
||||||
xfs_agnumber_t agno = NULLAGNUMBER;
|
xfs_agnumber_t agno = NULLAGNUMBER;
|
||||||
|
|
||||||
|
@ -577,10 +577,10 @@ xfs_alloc_busy_clear(
|
||||||
}
|
}
|
||||||
|
|
||||||
if (do_discard && busyp->length &&
|
if (do_discard && busyp->length &&
|
||||||
!(busyp->flags & XFS_ALLOC_BUSY_SKIP_DISCARD))
|
!(busyp->flags & XFS_EXTENT_BUSY_SKIP_DISCARD))
|
||||||
busyp->flags = XFS_ALLOC_BUSY_DISCARDED;
|
busyp->flags = XFS_EXTENT_BUSY_DISCARDED;
|
||||||
else
|
else
|
||||||
xfs_alloc_busy_clear_one(mp, pag, busyp);
|
xfs_extent_busy_clear_one(mp, pag, busyp);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (pag) {
|
if (pag) {
|
||||||
|
@ -593,11 +593,11 @@ xfs_alloc_busy_clear(
|
||||||
* Callback for list_sort to sort busy extents by the AG they reside in.
|
* Callback for list_sort to sort busy extents by the AG they reside in.
|
||||||
*/
|
*/
|
||||||
int
|
int
|
||||||
xfs_alloc_busy_ag_cmp(
|
xfs_extent_busy_ag_cmp(
|
||||||
void *priv,
|
void *priv,
|
||||||
struct list_head *a,
|
struct list_head *a,
|
||||||
struct list_head *b)
|
struct list_head *b)
|
||||||
{
|
{
|
||||||
return container_of(a, struct xfs_busy_extent, list)->agno -
|
return container_of(a, struct xfs_extent_busy, list)->agno -
|
||||||
container_of(b, struct xfs_busy_extent, list)->agno;
|
container_of(b, struct xfs_extent_busy, list)->agno;
|
||||||
}
|
}
|
||||||
|
|
|
@ -27,39 +27,39 @@
|
||||||
* Note that we use the transaction ID to record the transaction, not the
|
* Note that we use the transaction ID to record the transaction, not the
|
||||||
* transaction structure itself. See xfs_extent_busy_insert() for details.
|
* transaction structure itself. See xfs_extent_busy_insert() for details.
|
||||||
*/
|
*/
|
||||||
struct xfs_busy_extent {
|
struct xfs_extent_busy {
|
||||||
struct rb_node rb_node; /* ag by-bno indexed search tree */
|
struct rb_node rb_node; /* ag by-bno indexed search tree */
|
||||||
struct list_head list; /* transaction busy extent list */
|
struct list_head list; /* transaction busy extent list */
|
||||||
xfs_agnumber_t agno;
|
xfs_agnumber_t agno;
|
||||||
xfs_agblock_t bno;
|
xfs_agblock_t bno;
|
||||||
xfs_extlen_t length;
|
xfs_extlen_t length;
|
||||||
unsigned int flags;
|
unsigned int flags;
|
||||||
#define XFS_ALLOC_BUSY_DISCARDED 0x01 /* undergoing a discard op. */
|
#define XFS_EXTENT_BUSY_DISCARDED 0x01 /* undergoing a discard op. */
|
||||||
#define XFS_ALLOC_BUSY_SKIP_DISCARD 0x02 /* do not discard */
|
#define XFS_EXTENT_BUSY_SKIP_DISCARD 0x02 /* do not discard */
|
||||||
};
|
};
|
||||||
|
|
||||||
void
|
void
|
||||||
xfs_alloc_busy_insert(struct xfs_trans *tp, xfs_agnumber_t agno,
|
xfs_extent_busy_insert(struct xfs_trans *tp, xfs_agnumber_t agno,
|
||||||
xfs_agblock_t bno, xfs_extlen_t len, unsigned int flags);
|
xfs_agblock_t bno, xfs_extlen_t len, unsigned int flags);
|
||||||
|
|
||||||
void
|
void
|
||||||
xfs_alloc_busy_clear(struct xfs_mount *mp, struct list_head *list,
|
xfs_extent_busy_clear(struct xfs_mount *mp, struct list_head *list,
|
||||||
bool do_discard);
|
bool do_discard);
|
||||||
|
|
||||||
int
|
int
|
||||||
xfs_alloc_busy_search(struct xfs_mount *mp, xfs_agnumber_t agno,
|
xfs_extent_busy_search(struct xfs_mount *mp, xfs_agnumber_t agno,
|
||||||
xfs_agblock_t bno, xfs_extlen_t len);
|
xfs_agblock_t bno, xfs_extlen_t len);
|
||||||
|
|
||||||
void
|
void
|
||||||
xfs_alloc_busy_reuse(struct xfs_mount *mp, xfs_agnumber_t agno,
|
xfs_extent_busy_reuse(struct xfs_mount *mp, xfs_agnumber_t agno,
|
||||||
xfs_agblock_t fbno, xfs_extlen_t flen, bool userdata);
|
xfs_agblock_t fbno, xfs_extlen_t flen, bool userdata);
|
||||||
|
|
||||||
int
|
int
|
||||||
xfs_alloc_busy_ag_cmp(void *priv, struct list_head *a, struct list_head *b);
|
xfs_extent_busy_ag_cmp(void *priv, struct list_head *a, struct list_head *b);
|
||||||
|
|
||||||
static inline void xfs_alloc_busy_sort(struct list_head *list)
|
static inline void xfs_extent_busy_sort(struct list_head *list)
|
||||||
{
|
{
|
||||||
list_sort(NULL, list, xfs_alloc_busy_ag_cmp);
|
list_sort(NULL, list, xfs_extent_busy_ag_cmp);
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif /* __XFS_EXTENT_BUSY_H__ */
|
#endif /* __XFS_EXTENT_BUSY_H__ */
|
||||||
|
|
|
@ -338,8 +338,8 @@ xlog_cil_committed(
|
||||||
xfs_trans_committed_bulk(ctx->cil->xc_log->l_ailp, ctx->lv_chain,
|
xfs_trans_committed_bulk(ctx->cil->xc_log->l_ailp, ctx->lv_chain,
|
||||||
ctx->start_lsn, abort);
|
ctx->start_lsn, abort);
|
||||||
|
|
||||||
xfs_alloc_busy_sort(&ctx->busy_extents);
|
xfs_extent_busy_sort(&ctx->busy_extents);
|
||||||
xfs_alloc_busy_clear(mp, &ctx->busy_extents,
|
xfs_extent_busy_clear(mp, &ctx->busy_extents,
|
||||||
(mp->m_flags & XFS_MOUNT_DISCARD) && !abort);
|
(mp->m_flags & XFS_MOUNT_DISCARD) && !abort);
|
||||||
|
|
||||||
spin_lock(&ctx->cil->xc_cil_lock);
|
spin_lock(&ctx->cil->xc_cil_lock);
|
||||||
|
@ -352,7 +352,7 @@ xlog_cil_committed(
|
||||||
ASSERT(mp->m_flags & XFS_MOUNT_DISCARD);
|
ASSERT(mp->m_flags & XFS_MOUNT_DISCARD);
|
||||||
|
|
||||||
xfs_discard_extents(mp, &ctx->busy_extents);
|
xfs_discard_extents(mp, &ctx->busy_extents);
|
||||||
xfs_alloc_busy_clear(mp, &ctx->busy_extents, false);
|
xfs_extent_busy_clear(mp, &ctx->busy_extents, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
kmem_free(ctx);
|
kmem_free(ctx);
|
||||||
|
|
|
@ -1142,7 +1142,7 @@ TRACE_EVENT(xfs_bunmap,
|
||||||
|
|
||||||
);
|
);
|
||||||
|
|
||||||
DECLARE_EVENT_CLASS(xfs_busy_class,
|
DECLARE_EVENT_CLASS(xfs_extent_busy_class,
|
||||||
TP_PROTO(struct xfs_mount *mp, xfs_agnumber_t agno,
|
TP_PROTO(struct xfs_mount *mp, xfs_agnumber_t agno,
|
||||||
xfs_agblock_t agbno, xfs_extlen_t len),
|
xfs_agblock_t agbno, xfs_extlen_t len),
|
||||||
TP_ARGS(mp, agno, agbno, len),
|
TP_ARGS(mp, agno, agbno, len),
|
||||||
|
@ -1165,17 +1165,17 @@ DECLARE_EVENT_CLASS(xfs_busy_class,
|
||||||
__entry->len)
|
__entry->len)
|
||||||
);
|
);
|
||||||
#define DEFINE_BUSY_EVENT(name) \
|
#define DEFINE_BUSY_EVENT(name) \
|
||||||
DEFINE_EVENT(xfs_busy_class, name, \
|
DEFINE_EVENT(xfs_extent_busy_class, name, \
|
||||||
TP_PROTO(struct xfs_mount *mp, xfs_agnumber_t agno, \
|
TP_PROTO(struct xfs_mount *mp, xfs_agnumber_t agno, \
|
||||||
xfs_agblock_t agbno, xfs_extlen_t len), \
|
xfs_agblock_t agbno, xfs_extlen_t len), \
|
||||||
TP_ARGS(mp, agno, agbno, len))
|
TP_ARGS(mp, agno, agbno, len))
|
||||||
DEFINE_BUSY_EVENT(xfs_alloc_busy);
|
DEFINE_BUSY_EVENT(xfs_extent_busy);
|
||||||
DEFINE_BUSY_EVENT(xfs_alloc_busy_enomem);
|
DEFINE_BUSY_EVENT(xfs_extent_busy_enomem);
|
||||||
DEFINE_BUSY_EVENT(xfs_alloc_busy_force);
|
DEFINE_BUSY_EVENT(xfs_extent_busy_force);
|
||||||
DEFINE_BUSY_EVENT(xfs_alloc_busy_reuse);
|
DEFINE_BUSY_EVENT(xfs_extent_busy_reuse);
|
||||||
DEFINE_BUSY_EVENT(xfs_alloc_busy_clear);
|
DEFINE_BUSY_EVENT(xfs_extent_busy_clear);
|
||||||
|
|
||||||
TRACE_EVENT(xfs_alloc_busy_trim,
|
TRACE_EVENT(xfs_extent_busy_trim,
|
||||||
TP_PROTO(struct xfs_mount *mp, xfs_agnumber_t agno,
|
TP_PROTO(struct xfs_mount *mp, xfs_agnumber_t agno,
|
||||||
xfs_agblock_t agbno, xfs_extlen_t len,
|
xfs_agblock_t agbno, xfs_extlen_t len,
|
||||||
xfs_agblock_t tbno, xfs_extlen_t tlen),
|
xfs_agblock_t tbno, xfs_extlen_t tlen),
|
||||||
|
|
|
@ -608,8 +608,8 @@ STATIC void
|
||||||
xfs_trans_free(
|
xfs_trans_free(
|
||||||
struct xfs_trans *tp)
|
struct xfs_trans *tp)
|
||||||
{
|
{
|
||||||
xfs_alloc_busy_sort(&tp->t_busy);
|
xfs_extent_busy_sort(&tp->t_busy);
|
||||||
xfs_alloc_busy_clear(tp->t_mountp, &tp->t_busy, false);
|
xfs_extent_busy_clear(tp->t_mountp, &tp->t_busy, false);
|
||||||
|
|
||||||
atomic_dec(&tp->t_mountp->m_active_trans);
|
atomic_dec(&tp->t_mountp->m_active_trans);
|
||||||
xfs_trans_free_dqinfo(tp);
|
xfs_trans_free_dqinfo(tp);
|
||||||
|
|
Loading…
Reference in New Issue