Commit 85e55b13 authored by Chris Mason's avatar Chris Mason Committed by David Woodhouse

Btrfs: cache the extent tree preallocation

Signed-off-by: default avatarChris Mason <chris.mason@oracle.com>
parent 63c992fd
...@@ -741,7 +741,6 @@ static int finish_current_insert(struct btrfs_trans_handle *trans, struct ...@@ -741,7 +741,6 @@ static int finish_current_insert(struct btrfs_trans_handle *trans, struct
BUG_ON(ret); BUG_ON(ret);
} }
extent_root->fs_info->extent_tree_insert_nr = 0; extent_root->fs_info->extent_tree_insert_nr = 0;
extent_root->fs_info->extent_tree_prealloc_nr = 0;
return 0; return 0;
} }
...@@ -951,6 +950,18 @@ static int find_free_extent(struct btrfs_trans_handle *trans, struct btrfs_root ...@@ -951,6 +950,18 @@ static int find_free_extent(struct btrfs_trans_handle *trans, struct btrfs_root
num_blocks = 1; num_blocks = 1;
total_needed = (min(level + 1, BTRFS_MAX_LEVEL) + 2) * 3; total_needed = (min(level + 1, BTRFS_MAX_LEVEL) + 2) * 3;
} }
if (fill_prealloc) {
u64 first;
int nr = info->extent_tree_prealloc_nr;
first = info->extent_tree_prealloc[nr - 1];
if (info->extent_tree_prealloc_nr >= total_needed &&
first >= search_start) {
ins->objectid = info->extent_tree_prealloc[0];
ins->offset = 1;
return 0;
}
info->extent_tree_prealloc_nr = 0;
}
if (search_end == (u64)-1) if (search_end == (u64)-1)
search_end = btrfs_super_total_blocks(info->disk_super); search_end = btrfs_super_total_blocks(info->disk_super);
if (hint_block) { if (hint_block) {
...@@ -1107,7 +1118,6 @@ static int find_free_extent(struct btrfs_trans_handle *trans, struct btrfs_root ...@@ -1107,7 +1118,6 @@ static int find_free_extent(struct btrfs_trans_handle *trans, struct btrfs_root
if (ins->objectid + num_blocks > first && if (ins->objectid + num_blocks > first &&
ins->objectid <= info->extent_tree_prealloc[0]) { ins->objectid <= info->extent_tree_prealloc[0]) {
search_start = info->extent_tree_prealloc[0] + 1; search_start = info->extent_tree_prealloc[0] + 1;
WARN_ON(!full_scan);
goto new_group; goto new_group;
} }
} }
......
Markdown is supported
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