xfs: do not immediately reuse busy extent ranges
authorChristoph Hellwig <hch@infradead.org>
Sun, 24 Apr 2011 19:06:15 +0000 (19:06 +0000)
committerAlex Elder <aelder@sgi.com>
Thu, 28 Apr 2011 18:18:01 +0000 (13:18 -0500)
commite26f0501cf743a4289603501413f97ffcb4612f2
tree6327f071c53ddb494d59ce04b3cf8a760aceb987
parenta870acd9b2671de56514a430edfa7867823c31c9
xfs: do not immediately reuse busy extent ranges

Every time we reallocate a busy extent, we cause a synchronous log force
to occur to ensure the freeing transaction is on disk before we continue
and use the newly allocated extent.  This is extremely sub-optimal as we
have to mark every transaction with blocks that get reused as synchronous.

Instead of searching the busy extent list after deciding on the extent to
allocate, check each candidate extent during the allocation decisions as
to whether they are in the busy list.  If they are in the busy list, we
trim the busy range out of the extent we have found and determine if that
trimmed range is still OK for allocation. In many cases, this check can
be incorporated into the allocation extent alignment code which already
does trimming of the found extent before determining if it is a valid
candidate for allocation.

Based on earlier patches from Dave Chinner.

Signed-off-by: Christoph Hellwig <hch@lst.de>
Signed-off-by: Alex Elder <aelder@sgi.com>
fs/xfs/linux-2.6/xfs_trace.h
fs/xfs/xfs_alloc.c