Btrfs: kill the block group alloc mutex
authorJosef Bacik <jbacik@redhat.com>
Fri, 3 Apr 2009 14:14:18 +0000 (10:14 -0400)
committerChris Mason <chris.mason@oracle.com>
Fri, 3 Apr 2009 14:14:18 +0000 (10:14 -0400)
commit6226cb0a5ea3f6289883753c15d53f48a6c6bbfb
tree819765cd5a5816017580f638c4b2a3e7f6354aea
parent2552d17e328044d1811cae733087a1fb9aac2eb6
Btrfs: kill the block group alloc mutex

This patch removes the block group alloc mutex used to protect the free space
tree for allocations and replaces it with a spin lock which is used only to
protect the free space rb tree.  This means we only take the lock when we are
directly manipulating the tree, which makes us a touch faster with
multi-threaded workloads.

This patch also gets rid of btrfs_find_free_space and replaces it with
btrfs_find_space_for_alloc, which takes the number of bytes you want to
allocate, and empty_size, which is used to indicate how much free space should
be at the end of the allocation.

It will return an offset for the allocator to use.  If we don't end up using it
we _must_ call btrfs_add_free_space to put it back.  This is the tradeoff to
kill the alloc_mutex, since we need to make sure nobody else comes along and
takes our space.

Signed-off-by: Josef Bacik <jbacik@redhat.com>
fs/btrfs/ctree.h
fs/btrfs/extent-tree.c
fs/btrfs/free-space-cache.c