Commit 97d9a8a4 authored by Tsutomu Itoh's avatar Tsutomu Itoh Committed by root

Btrfs: check return value of read_tree_block()

This patch is checking return value of read_tree_block(),
and if it is NULL, error processing.
Signed-off-by: default avatarTsutomu Itoh <t-itoh@jp.fujitsu.com>
Signed-off-by: default avatarChris Mason <chris.mason@oracle.com>
parent 7e75bf3f
...@@ -682,6 +682,8 @@ int btrfs_realloc_node(struct btrfs_trans_handle *trans, ...@@ -682,6 +682,8 @@ int btrfs_realloc_node(struct btrfs_trans_handle *trans,
if (!cur) { if (!cur) {
cur = read_tree_block(root, blocknr, cur = read_tree_block(root, blocknr,
blocksize, gen); blocksize, gen);
if (!cur)
return -EIO;
} else if (!uptodate) { } else if (!uptodate) {
btrfs_read_buffer(cur, gen); btrfs_read_buffer(cur, gen);
} }
...@@ -4087,6 +4089,7 @@ int btrfs_search_forward(struct btrfs_root *root, struct btrfs_key *min_key, ...@@ -4087,6 +4089,7 @@ int btrfs_search_forward(struct btrfs_root *root, struct btrfs_key *min_key,
} }
btrfs_set_path_blocking(path); btrfs_set_path_blocking(path);
cur = read_node_slot(root, cur, slot); cur = read_node_slot(root, cur, slot);
BUG_ON(!cur);
btrfs_tree_lock(cur); btrfs_tree_lock(cur);
......
...@@ -6067,6 +6067,8 @@ static noinline int do_walk_down(struct btrfs_trans_handle *trans, ...@@ -6067,6 +6067,8 @@ static noinline int do_walk_down(struct btrfs_trans_handle *trans,
if (reada && level == 1) if (reada && level == 1)
reada_walk_down(trans, root, wc, path); reada_walk_down(trans, root, wc, path);
next = read_tree_block(root, bytenr, blocksize, generation); next = read_tree_block(root, bytenr, blocksize, generation);
if (!next)
return -EIO;
btrfs_tree_lock(next); btrfs_tree_lock(next);
btrfs_set_lock_blocking(next); btrfs_set_lock_blocking(next);
} }
...@@ -7937,6 +7939,10 @@ static noinline int relocate_one_extent(struct btrfs_root *extent_root, ...@@ -7937,6 +7939,10 @@ static noinline int relocate_one_extent(struct btrfs_root *extent_root,
eb = read_tree_block(found_root, block_start, eb = read_tree_block(found_root, block_start,
block_size, 0); block_size, 0);
if (!eb) {
ret = -EIO;
goto out;
}
btrfs_tree_lock(eb); btrfs_tree_lock(eb);
BUG_ON(level != btrfs_header_level(eb)); BUG_ON(level != btrfs_header_level(eb));
......
...@@ -1724,6 +1724,7 @@ int replace_path(struct btrfs_trans_handle *trans, ...@@ -1724,6 +1724,7 @@ int replace_path(struct btrfs_trans_handle *trans,
eb = read_tree_block(dest, old_bytenr, blocksize, eb = read_tree_block(dest, old_bytenr, blocksize,
old_ptr_gen); old_ptr_gen);
BUG_ON(!eb);
btrfs_tree_lock(eb); btrfs_tree_lock(eb);
if (cow) { if (cow) {
ret = btrfs_cow_block(trans, dest, eb, parent, ret = btrfs_cow_block(trans, dest, eb, parent,
...@@ -2513,6 +2514,10 @@ static int do_relocation(struct btrfs_trans_handle *trans, ...@@ -2513,6 +2514,10 @@ static int do_relocation(struct btrfs_trans_handle *trans,
blocksize = btrfs_level_size(root, node->level); blocksize = btrfs_level_size(root, node->level);
generation = btrfs_node_ptr_generation(upper->eb, slot); generation = btrfs_node_ptr_generation(upper->eb, slot);
eb = read_tree_block(root, bytenr, blocksize, generation); eb = read_tree_block(root, bytenr, blocksize, generation);
if (!eb) {
err = -EIO;
goto next;
}
btrfs_tree_lock(eb); btrfs_tree_lock(eb);
btrfs_set_lock_blocking(eb); btrfs_set_lock_blocking(eb);
...@@ -2670,6 +2675,7 @@ static int get_tree_block_key(struct reloc_control *rc, ...@@ -2670,6 +2675,7 @@ static int get_tree_block_key(struct reloc_control *rc,
BUG_ON(block->key_ready); BUG_ON(block->key_ready);
eb = read_tree_block(rc->extent_root, block->bytenr, eb = read_tree_block(rc->extent_root, block->bytenr,
block->key.objectid, block->key.offset); block->key.objectid, block->key.offset);
BUG_ON(!eb);
WARN_ON(btrfs_header_level(eb) != block->level); WARN_ON(btrfs_header_level(eb) != block->level);
if (block->level == 0) if (block->level == 0)
btrfs_item_key_to_cpu(eb, &block->key, 0); btrfs_item_key_to_cpu(eb, &block->key, 0);
......
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