Commit 5b7c3fcc authored by Chris Mason's avatar Chris Mason
Browse files

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: default avatarChris Mason <chris.mason@oracle.com>
parent 5f2cc086
......@@ -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);
......
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment