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: Tsutomu Itoh <t-itoh@jp.fujitsu.com> Signed-off-by: Chris Mason <chris.mason@oracle.com>
This commit is contained in:
parent
7e75bf3ff3
commit
97d9a8a420
|
@ -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 @@ find_next_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,
|
||||||
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,
|
||||||
|
|
||||||
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 @@ again:
|
||||||
|
|
||||||
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,
|
||||||
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,
|
||||||
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);
|
||||||
|
|
Loading…
Reference in a new issue