|
@@ -2469,7 +2469,7 @@ xfs_free_extent(
|
|
|
|
|
|
error = xfs_free_ag_extent(tp, args.agbp, args.agno, args.agbno, len, 0);
|
|
|
if (!error)
|
|
|
- xfs_alloc_busy_insert(tp, args.agno, args.agbno, len);
|
|
|
+ xfs_alloc_busy_insert(tp, args.agno, args.agbno, len, 0);
|
|
|
error0:
|
|
|
xfs_perag_put(args.pag);
|
|
|
return error;
|
|
@@ -2480,7 +2480,8 @@ xfs_alloc_busy_insert(
|
|
|
struct xfs_trans *tp,
|
|
|
xfs_agnumber_t agno,
|
|
|
xfs_agblock_t bno,
|
|
|
- xfs_extlen_t len)
|
|
|
+ xfs_extlen_t len,
|
|
|
+ unsigned int flags)
|
|
|
{
|
|
|
struct xfs_busy_extent *new;
|
|
|
struct xfs_busy_extent *busyp;
|
|
@@ -2504,6 +2505,7 @@ xfs_alloc_busy_insert(
|
|
|
new->bno = bno;
|
|
|
new->length = len;
|
|
|
INIT_LIST_HEAD(&new->list);
|
|
|
+ new->flags = flags;
|
|
|
|
|
|
/* trace before insert to be able to see failed inserts */
|
|
|
trace_xfs_alloc_busy(tp->t_mountp, agno, bno, len);
|
|
@@ -3018,7 +3020,8 @@ xfs_alloc_busy_clear(
|
|
|
agno = busyp->agno;
|
|
|
}
|
|
|
|
|
|
- if (do_discard && busyp->length)
|
|
|
+ if (do_discard && busyp->length &&
|
|
|
+ !(busyp->flags & XFS_ALLOC_BUSY_SKIP_DISCARD))
|
|
|
busyp->flags = XFS_ALLOC_BUSY_DISCARDED;
|
|
|
else
|
|
|
xfs_alloc_busy_clear_one(mp, pag, busyp);
|