提交 5b7c3fcc 编写于 作者: C Chris Mason

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: NChris Mason <chris.mason@oracle.com>
上级 5f2cc086
......@@ -2255,9 +2255,9 @@ static int noinline find_free_extent(struct btrfs_trans_handle *trans,
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 @@ static int noinline find_free_extent(struct btrfs_trans_handle *trans,
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);
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册