提交 60cde612 编写于 作者: C Chris Mason

Btrfs: Use last_alloc optimizations for metadata, even without -o ssd

Signed-off-by: NChris Mason <chris.mason@oracle.com>
上级 21a4989d
...@@ -1431,19 +1431,19 @@ static int noinline find_free_extent(struct btrfs_trans_handle *trans, ...@@ -1431,19 +1431,19 @@ static int noinline find_free_extent(struct btrfs_trans_handle *trans,
data = BTRFS_BLOCK_GROUP_MIXED; data = BTRFS_BLOCK_GROUP_MIXED;
} }
/* for SSD, cluster allocations together as much as possible */ if (!data)
if (btrfs_test_opt(root, SSD)) { last_ptr = &root->fs_info->last_alloc;
if (data)
last_ptr = &root->fs_info->last_data_alloc; if (data && btrfs_test_opt(root, SSD))
else last_ptr = &root->fs_info->last_data_alloc;
last_ptr = &root->fs_info->last_alloc;
if (*last_ptr) { if (last_ptr) {
if (*last_ptr)
hint_byte = *last_ptr; hint_byte = *last_ptr;
}
else { else {
hint_byte = hint_byte & hint_byte = hint_byte &
~((u64)BTRFS_BLOCK_GROUP_SIZE - 1); ~((u64)BTRFS_BLOCK_GROUP_SIZE - 1);
empty_size += 16 * 1024 * 1024; empty_size += 2 * 1024 * 1024;
} }
} }
...@@ -1473,9 +1473,8 @@ static int noinline find_free_extent(struct btrfs_trans_handle *trans, ...@@ -1473,9 +1473,8 @@ static int noinline find_free_extent(struct btrfs_trans_handle *trans,
search_start = find_search_start(root, &block_group, search_start, search_start = find_search_start(root, &block_group, search_start,
total_needed, data); total_needed, data);
if (btrfs_test_opt(root, SSD) && *last_ptr && if (last_ptr && *last_ptr && search_start != *last_ptr) {
search_start != *last_ptr) { *last_ptr = 0;
info->last_alloc = 0;
if (!empty_size) { if (!empty_size) {
empty_size += 16 * 1024 * 1024; empty_size += 16 * 1024 * 1024;
total_needed += empty_size; total_needed += empty_size;
...@@ -1612,7 +1611,7 @@ static int noinline find_free_extent(struct btrfs_trans_handle *trans, ...@@ -1612,7 +1611,7 @@ static int noinline find_free_extent(struct btrfs_trans_handle *trans,
} }
ins->offset = num_bytes; ins->offset = num_bytes;
btrfs_free_path(path); btrfs_free_path(path);
if (btrfs_test_opt(root, SSD)) if (last_ptr)
*last_ptr = ins->objectid + ins->offset; *last_ptr = ins->objectid + ins->offset;
return 0; return 0;
...@@ -1827,8 +1826,7 @@ struct extent_buffer *__btrfs_alloc_free_block(struct btrfs_trans_handle *trans, ...@@ -1827,8 +1826,7 @@ struct extent_buffer *__btrfs_alloc_free_block(struct btrfs_trans_handle *trans,
buf->start, buf->start + buf->len - 1, buf->start, buf->start + buf->len - 1,
EXTENT_CSUM, GFP_NOFS); EXTENT_CSUM, GFP_NOFS);
buf->flags |= EXTENT_CSUM; buf->flags |= EXTENT_CSUM;
if (!btrfs_test_opt(root, SSD)) btrfs_set_buffer_defrag(buf);
btrfs_set_buffer_defrag(buf);
trans->blocks_used++; trans->blocks_used++;
return buf; return buf;
} }
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册