diff options
Diffstat (limited to 'fs/btrfs/extent-tree.c')
-rw-r--r-- | fs/btrfs/extent-tree.c | 30 |
1 files changed, 1 insertions, 29 deletions
diff --git a/fs/btrfs/extent-tree.c b/fs/btrfs/extent-tree.c index 9455974dabea..5d4d5d8db8ef 100644 --- a/fs/btrfs/extent-tree.c +++ b/fs/btrfs/extent-tree.c | |||
@@ -32,33 +32,6 @@ static int finish_current_insert(struct btrfs_trans_handle *trans, struct | |||
32 | static int del_pending_extents(struct btrfs_trans_handle *trans, struct | 32 | static int del_pending_extents(struct btrfs_trans_handle *trans, struct |
33 | btrfs_root *extent_root); | 33 | btrfs_root *extent_root); |
34 | 34 | ||
35 | static void reada_extent_leaves(struct btrfs_root *root, | ||
36 | struct btrfs_path *path, u64 limit) | ||
37 | { | ||
38 | struct btrfs_node *node; | ||
39 | int i; | ||
40 | int nritems; | ||
41 | u64 item_objectid; | ||
42 | u64 blocknr; | ||
43 | int slot; | ||
44 | int ret; | ||
45 | |||
46 | if (!path->nodes[1]) | ||
47 | return; | ||
48 | node = btrfs_buffer_node(path->nodes[1]); | ||
49 | slot = path->slots[1] + 1; | ||
50 | nritems = btrfs_header_nritems(&node->header); | ||
51 | for (i = slot; i < nritems && i < slot + 8; i++) { | ||
52 | item_objectid = btrfs_disk_key_objectid(&node->ptrs[i].key); | ||
53 | if (item_objectid > limit) | ||
54 | break; | ||
55 | blocknr = btrfs_node_blockptr(node, i); | ||
56 | ret = readahead_tree_block(root, blocknr); | ||
57 | if (ret) | ||
58 | break; | ||
59 | } | ||
60 | } | ||
61 | |||
62 | static int cache_block_group(struct btrfs_root *root, | 35 | static int cache_block_group(struct btrfs_root *root, |
63 | struct btrfs_block_group_cache *block_group) | 36 | struct btrfs_block_group_cache *block_group) |
64 | { | 37 | { |
@@ -84,6 +57,7 @@ static int cache_block_group(struct btrfs_root *root, | |||
84 | path = btrfs_alloc_path(); | 57 | path = btrfs_alloc_path(); |
85 | if (!path) | 58 | if (!path) |
86 | return -ENOMEM; | 59 | return -ENOMEM; |
60 | path->reada = 1; | ||
87 | key.objectid = block_group->key.objectid; | 61 | key.objectid = block_group->key.objectid; |
88 | key.flags = 0; | 62 | key.flags = 0; |
89 | key.offset = 0; | 63 | key.offset = 0; |
@@ -94,12 +68,10 @@ static int cache_block_group(struct btrfs_root *root, | |||
94 | if (ret && path->slots[0] > 0) | 68 | if (ret && path->slots[0] > 0) |
95 | path->slots[0]--; | 69 | path->slots[0]--; |
96 | limit = block_group->key.objectid + block_group->key.offset; | 70 | limit = block_group->key.objectid + block_group->key.offset; |
97 | reada_extent_leaves(root, path, limit); | ||
98 | while(1) { | 71 | while(1) { |
99 | leaf = btrfs_buffer_leaf(path->nodes[0]); | 72 | leaf = btrfs_buffer_leaf(path->nodes[0]); |
100 | slot = path->slots[0]; | 73 | slot = path->slots[0]; |
101 | if (slot >= btrfs_header_nritems(&leaf->header)) { | 74 | if (slot >= btrfs_header_nritems(&leaf->header)) { |
102 | reada_extent_leaves(root, path, limit); | ||
103 | ret = btrfs_next_leaf(root, path); | 75 | ret = btrfs_next_leaf(root, path); |
104 | if (ret < 0) | 76 | if (ret < 0) |
105 | goto err; | 77 | goto err; |