Commit e78a3ce2 authored by Christoph Hellwig's avatar Christoph Hellwig Committed by Chandan Babu R
Browse files

xfs: move more logic into xfs_extent_busy_clear_one



Move the handling of discarded entries into xfs_extent_busy_clear_one
to reuse the length check and tidy up the logic in the caller.

Signed-off-by: default avatarChristoph Hellwig <hch@lst.de>
Reviewed-by: default avatar"Darrick J. Wong" <djwong@kernel.org>
Signed-off-by: default avatarChandan Babu R <chandanbabu@kernel.org>
parent 05150d46
Loading
Loading
Loading
Loading
+12 −11
Original line number Diff line number Diff line
@@ -518,20 +518,26 @@ xfs_extent_busy_trim(
	goto out;
}

STATIC void
static bool
xfs_extent_busy_clear_one(
	struct xfs_mount	*mp,
	struct xfs_perag	*pag,
	struct xfs_extent_busy	*busyp)
	struct xfs_extent_busy	*busyp,
	bool			do_discard)
{
	if (busyp->length) {
		trace_xfs_extent_busy_clear(mp, busyp->agno, busyp->bno,
						busyp->length);
		if (do_discard &&
		    !(busyp->flags & XFS_EXTENT_BUSY_SKIP_DISCARD)) {
			busyp->flags = XFS_EXTENT_BUSY_DISCARDED;
			return false;
		}
		trace_xfs_extent_busy_clear(pag->pag_mount, busyp->agno,
				busyp->bno, busyp->length);
		rb_erase(&busyp->rb_node, &pag->pagb_tree);
	}

	list_del_init(&busyp->list);
	kfree(busyp);
	return true;
}

static void
@@ -575,14 +581,9 @@ xfs_extent_busy_clear(
			wakeup = false;
		}

		if (do_discard && busyp->length &&
		    !(busyp->flags & XFS_EXTENT_BUSY_SKIP_DISCARD)) {
			busyp->flags = XFS_EXTENT_BUSY_DISCARDED;
		} else {
			xfs_extent_busy_clear_one(mp, pag, busyp);
		if (xfs_extent_busy_clear_one(pag, busyp, do_discard))
			wakeup = true;
	}
	}

	if (pag)
		xfs_extent_busy_put_pag(pag, wakeup);