diff options
author | Chris Mason <chris.mason@oracle.com> | 2008-05-12 13:51:24 -0400 |
---|---|---|
committer | David Woodhouse <dwmw2@hera.kernel.org> | 2008-05-12 13:51:24 -0400 |
commit | 9a9bdd6047a378dbe5a65a79cb8537f797d4fd5c (patch) | |
tree | 970d141f33eaa0ac683fb772797172d24c7b8d97 /extent-tree.c | |
parent | d160150c8bf255b1dee65cab7488ac2529433a39 (diff) |
Pass down the expected generation number when reading tree blocks
Diffstat (limited to 'extent-tree.c')
-rw-r--r-- | extent-tree.c | 11 |
1 files changed, 8 insertions, 3 deletions
diff --git a/extent-tree.c b/extent-tree.c index 1d1dbc8b..545884a9 100644 --- a/extent-tree.c +++ b/extent-tree.c @@ -1225,7 +1225,8 @@ static int finish_current_insert(struct btrfs_trans_handle *trans, &extent_item, sizeof(extent_item)); clear_extent_bits(&info->extent_ins, start, end, EXTENT_LOCKED, GFP_NOFS); - eb = read_tree_block(extent_root, ins.objectid, ins.offset); + eb = read_tree_block(extent_root, ins.objectid, ins.offset, + trans->transid); level = btrfs_header_level(eb); if (level == 0) { btrfs_item_key(eb, &first, 0); @@ -1892,7 +1893,8 @@ static void noinline reada_walk_down(struct btrfs_root *root, } } mutex_unlock(&root->fs_info->fs_mutex); - ret = readahead_tree_block(root, bytenr, blocksize); + ret = readahead_tree_block(root, bytenr, blocksize, + btrfs_node_ptr_generation(node, i)); last = bytenr + blocksize; cond_resched(); mutex_lock(&root->fs_info->fs_mutex); @@ -1912,6 +1914,7 @@ static int noinline walk_down_tree(struct btrfs_trans_handle *trans, u64 root_owner; u64 root_gen; u64 bytenr; + u64 ptr_gen; struct extent_buffer *next; struct extent_buffer *cur; struct extent_buffer *parent; @@ -1948,6 +1951,7 @@ static int noinline walk_down_tree(struct btrfs_trans_handle *trans, break; } bytenr = btrfs_node_blockptr(cur, path->slots[*level]); + ptr_gen = btrfs_node_ptr_generation(cur, path->slots[*level]); blocksize = btrfs_level_size(root, *level - 1); ret = lookup_extent_ref(trans, root, bytenr, blocksize, &refs); BUG_ON(ret); @@ -1967,7 +1971,8 @@ static int noinline walk_down_tree(struct btrfs_trans_handle *trans, free_extent_buffer(next); reada_walk_down(root, cur, path->slots[*level]); mutex_unlock(&root->fs_info->fs_mutex); - next = read_tree_block(root, bytenr, blocksize); + next = read_tree_block(root, bytenr, blocksize, + ptr_gen); mutex_lock(&root->fs_info->fs_mutex); /* we dropped the lock, check one more time */ |