aboutsummaryrefslogtreecommitdiffstats
path: root/fs/btrfs/extent-tree.c
diff options
context:
space:
mode:
authorChris Mason <chris.mason@oracle.com>2008-11-10 07:26:33 -0500
committerChris Mason <chris.mason@oracle.com>2008-11-10 07:26:33 -0500
commit5b7c3fcc46b5deb8a368d5319cf87c78c2df65fe (patch)
tree7338c64a5431e65a5fa27b0df0c7f6e2baf0b884 /fs/btrfs/extent-tree.c
parent5f2cc086ccab27ac5252b3883ac004347860b4c7 (diff)
downloadkernel_samsung_smdk4412-5b7c3fcc46b5deb8a368d5319cf87c78c2df65fe.zip
kernel_samsung_smdk4412-5b7c3fcc46b5deb8a368d5319cf87c78c2df65fe.tar.gz
kernel_samsung_smdk4412-5b7c3fcc46b5deb8a368d5319cf87c78c2df65fe.tar.bz2
Btrfs: Don't substract too much from the allocation target (avoid wrapping)
When metadata allocation clustering has to fall back to unclustered allocs because large free areas could not be found, it was sometimes substracting too much from the total bytes to allocate. This would make it wrap below zero. Signed-off-by: Chris Mason <chris.mason@oracle.com>
Diffstat (limited to 'fs/btrfs/extent-tree.c')
-rw-r--r--fs/btrfs/extent-tree.c10
1 files changed, 5 insertions, 5 deletions
diff --git a/fs/btrfs/extent-tree.c b/fs/btrfs/extent-tree.c
index b92e92c..2451717 100644
--- a/fs/btrfs/extent-tree.c
+++ b/fs/btrfs/extent-tree.c
@@ -2255,9 +2255,9 @@ new_group:
mutex_unlock(&block_group->alloc_mutex);
new_group_no_lock:
last_wanted = 0;
- if (!allowed_chunk_alloc && loop > 0) {
- total_needed -= empty_cluster;
- empty_cluster = 0;
+ if (!allowed_chunk_alloc) {
+ total_needed -= empty_size;
+ empty_size = 0;
}
/*
* Here's how this works.
@@ -2277,8 +2277,8 @@ new_group_no_lock:
loop++;
} else if (loop == 1 && cur == head) {
- total_needed -= empty_cluster;
- empty_cluster = 0;
+ total_needed -= empty_size;
+ empty_size = 0;
if (allowed_chunk_alloc && !chunk_alloc_done) {
up_read(&space_info->groups_sem);