forked from Minki/linux
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>
This commit is contained in:
parent
5f2cc086cc
commit
5b7c3fcc46
@ -2255,9 +2255,9 @@ new_group:
|
|||||||
mutex_unlock(&block_group->alloc_mutex);
|
mutex_unlock(&block_group->alloc_mutex);
|
||||||
new_group_no_lock:
|
new_group_no_lock:
|
||||||
last_wanted = 0;
|
last_wanted = 0;
|
||||||
if (!allowed_chunk_alloc && loop > 0) {
|
if (!allowed_chunk_alloc) {
|
||||||
total_needed -= empty_cluster;
|
total_needed -= empty_size;
|
||||||
empty_cluster = 0;
|
empty_size = 0;
|
||||||
}
|
}
|
||||||
/*
|
/*
|
||||||
* Here's how this works.
|
* Here's how this works.
|
||||||
@ -2277,8 +2277,8 @@ new_group_no_lock:
|
|||||||
loop++;
|
loop++;
|
||||||
} else if (loop == 1 && cur == head) {
|
} else if (loop == 1 && cur == head) {
|
||||||
|
|
||||||
total_needed -= empty_cluster;
|
total_needed -= empty_size;
|
||||||
empty_cluster = 0;
|
empty_size = 0;
|
||||||
|
|
||||||
if (allowed_chunk_alloc && !chunk_alloc_done) {
|
if (allowed_chunk_alloc && !chunk_alloc_done) {
|
||||||
up_read(&space_info->groups_sem);
|
up_read(&space_info->groups_sem);
|
||||||
|
Loading…
Reference in New Issue
Block a user