• Josef Bacik's avatar
    Btrfs: kill the block group alloc mutex · 6226cb0a
    Josef Bacik authored
    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: default avatarJosef Bacik <jbacik@redhat.com>