xfs: do not discard alloc btree blocks
authorChristoph Hellwig <hch@infradead.org>
Wed, 4 May 2011 18:55:15 +0000 (18:55 +0000)
committerAlex Elder <aelder@sgi.com>
Tue, 24 May 2011 16:17:22 +0000 (11:17 -0500)
commit55a7bc5a30ff2d30d8a34fea2af9fc601b32e61a
treea6cc677dc240ebfeec85b66a2669842dc3094461
parente84661aa84e2e003738563f65155d4f12dc474e7
xfs: do not discard alloc btree blocks

Blocks for the allocation btree are allocated from and released to
the AGFL, and thus frequently reused.  Even worse we do not have an
easy way to avoid using an AGFL block when it is discarded due to
the simple FILO list of free blocks, and thus can frequently stall
on blocks that are currently undergoing a discard.

Add a flag to the busy extent tracking structure to skip the discard
for allocation btree blocks.  In normal operation these blocks are
reused frequently enough that there is no need to discard them
anyway, but if they spill over to the allocation btree as part of a
balance we "leak" blocks that we would otherwise discard.  We could
fix this by adding another flag and keeping these block in the
rbtree even after they aren't busy any more so that we could discard
them when they migrate out of the AGFL.  Given that this would cause
significant overhead I don't think it's worthwile for now.

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