diff options
author | Alexandre Oliva <oliva@lsd.ic.unicamp.br> | 2011-11-30 13:43:00 -0500 |
---|---|---|
committer | Chris Mason <chris.mason@oracle.com> | 2011-11-30 13:43:00 -0500 |
commit | 425d83156ca27f74e2cc3f370138038c3c8947f8 (patch) | |
tree | 67b452d423dc64aa3896078a2f90066922bbf384 /fs/btrfs | |
parent | 1b22bad779be7fe07242be04749ec969164528b8 (diff) | |
download | linux-stable-425d83156ca27f74e2cc3f370138038c3c8947f8.tar.gz linux-stable-425d83156ca27f74e2cc3f370138038c3c8947f8.tar.bz2 linux-stable-425d83156ca27f74e2cc3f370138038c3c8947f8.zip |
Btrfs: skip block groups without enough space for a cluster
We test whether a block group has enough free space to hold the
requested block, but when we're doing clustered allocation, we can
save some cycles by testing whether it has enough room for the cluster
upfront, otherwise we end up attempting to set up a cluster and
failing. Only in the NO_EMPTY_SIZE loop do we attempt an unclustered
allocation, and by then we'll have zeroed the cluster size, so this
patch won't stop us from using the block group as a last resort.
Signed-off-by: Alexandre Oliva <oliva@lsd.ic.unicamp.br>
Signed-off-by: Chris Mason <chris.mason@oracle.com>
Diffstat (limited to 'fs/btrfs')
-rw-r--r-- | fs/btrfs/extent-tree.c | 2 |
1 files changed, 1 insertions, 1 deletions
diff --git a/fs/btrfs/extent-tree.c b/fs/btrfs/extent-tree.c index 97c12067a4b0..71c8e7049d0c 100644 --- a/fs/btrfs/extent-tree.c +++ b/fs/btrfs/extent-tree.c @@ -5278,7 +5278,7 @@ alloc: spin_lock(&block_group->free_space_ctl->tree_lock); if (cached && block_group->free_space_ctl->free_space < - num_bytes + empty_size) { + num_bytes + empty_cluster + empty_size) { spin_unlock(&block_group->free_space_ctl->tree_lock); goto loop; } |