aboutsummaryrefslogtreecommitdiffstats
path: root/fs/btrfs/extent-tree.c
diff options
context:
space:
mode:
Diffstat (limited to 'fs/btrfs/extent-tree.c')
-rw-r--r--fs/btrfs/extent-tree.c30
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
32static int del_pending_extents(struct btrfs_trans_handle *trans, struct 32static int del_pending_extents(struct btrfs_trans_handle *trans, struct
33 btrfs_root *extent_root); 33 btrfs_root *extent_root);
34 34
35static 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
62static int cache_block_group(struct btrfs_root *root, 35static 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;