diff options
author | Tsutomu Itoh <t-itoh@jp.fujitsu.com> | 2011-03-24 02:33:21 -0400 |
---|---|---|
committer | root <Chris Mason chris.mason@oracle.com> | 2011-03-28 05:37:37 -0400 |
commit | 97d9a8a420444eb5b5c071d4b3b9c4100a7ae015 (patch) | |
tree | 4ed3e77541ebcc4885c4a10630e2f6bf94d3cef2 /fs/btrfs | |
parent | 7e75bf3ff3a716d7b21d8fb43bf823115801c1e9 (diff) |
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>
Diffstat (limited to 'fs/btrfs')
-rw-r--r-- | fs/btrfs/ctree.c | 3 | ||||
-rw-r--r-- | fs/btrfs/extent-tree.c | 6 | ||||
-rw-r--r-- | fs/btrfs/relocation.c | 6 |
3 files changed, 15 insertions, 0 deletions
diff --git a/fs/btrfs/ctree.c b/fs/btrfs/ctree.c index 4edcbe915736..84d7ca1fe0ba 100644 --- a/fs/btrfs/ctree.c +++ b/fs/btrfs/ctree.c | |||
@@ -682,6 +682,8 @@ int btrfs_realloc_node(struct btrfs_trans_handle *trans, | |||
682 | if (!cur) { | 682 | if (!cur) { |
683 | cur = read_tree_block(root, blocknr, | 683 | cur = read_tree_block(root, blocknr, |
684 | blocksize, gen); | 684 | blocksize, gen); |
685 | if (!cur) | ||
686 | return -EIO; | ||
685 | } else if (!uptodate) { | 687 | } else if (!uptodate) { |
686 | btrfs_read_buffer(cur, gen); | 688 | btrfs_read_buffer(cur, gen); |
687 | } | 689 | } |
@@ -4087,6 +4089,7 @@ find_next_key: | |||
4087 | } | 4089 | } |
4088 | btrfs_set_path_blocking(path); | 4090 | btrfs_set_path_blocking(path); |
4089 | cur = read_node_slot(root, cur, slot); | 4091 | cur = read_node_slot(root, cur, slot); |
4092 | BUG_ON(!cur); | ||
4090 | 4093 | ||
4091 | btrfs_tree_lock(cur); | 4094 | btrfs_tree_lock(cur); |
4092 | 4095 | ||
diff --git a/fs/btrfs/extent-tree.c b/fs/btrfs/extent-tree.c index a6a8159c5d1e..5bc658a9d85c 100644 --- a/fs/btrfs/extent-tree.c +++ b/fs/btrfs/extent-tree.c | |||
@@ -6067,6 +6067,8 @@ static noinline int do_walk_down(struct btrfs_trans_handle *trans, | |||
6067 | if (reada && level == 1) | 6067 | if (reada && level == 1) |
6068 | reada_walk_down(trans, root, wc, path); | 6068 | reada_walk_down(trans, root, wc, path); |
6069 | next = read_tree_block(root, bytenr, blocksize, generation); | 6069 | next = read_tree_block(root, bytenr, blocksize, generation); |
6070 | if (!next) | ||
6071 | return -EIO; | ||
6070 | btrfs_tree_lock(next); | 6072 | btrfs_tree_lock(next); |
6071 | btrfs_set_lock_blocking(next); | 6073 | btrfs_set_lock_blocking(next); |
6072 | } | 6074 | } |
@@ -7937,6 +7939,10 @@ static noinline int relocate_one_extent(struct btrfs_root *extent_root, | |||
7937 | 7939 | ||
7938 | eb = read_tree_block(found_root, block_start, | 7940 | eb = read_tree_block(found_root, block_start, |
7939 | block_size, 0); | 7941 | block_size, 0); |
7942 | if (!eb) { | ||
7943 | ret = -EIO; | ||
7944 | goto out; | ||
7945 | } | ||
7940 | btrfs_tree_lock(eb); | 7946 | btrfs_tree_lock(eb); |
7941 | BUG_ON(level != btrfs_header_level(eb)); | 7947 | BUG_ON(level != btrfs_header_level(eb)); |
7942 | 7948 | ||
diff --git a/fs/btrfs/relocation.c b/fs/btrfs/relocation.c index c863c8447015..58250e09eb05 100644 --- a/fs/btrfs/relocation.c +++ b/fs/btrfs/relocation.c | |||
@@ -1724,6 +1724,7 @@ again: | |||
1724 | 1724 | ||
1725 | eb = read_tree_block(dest, old_bytenr, blocksize, | 1725 | eb = read_tree_block(dest, old_bytenr, blocksize, |
1726 | old_ptr_gen); | 1726 | old_ptr_gen); |
1727 | BUG_ON(!eb); | ||
1727 | btrfs_tree_lock(eb); | 1728 | btrfs_tree_lock(eb); |
1728 | if (cow) { | 1729 | if (cow) { |
1729 | ret = btrfs_cow_block(trans, dest, eb, parent, | 1730 | ret = btrfs_cow_block(trans, dest, eb, parent, |
@@ -2513,6 +2514,10 @@ static int do_relocation(struct btrfs_trans_handle *trans, | |||
2513 | blocksize = btrfs_level_size(root, node->level); | 2514 | blocksize = btrfs_level_size(root, node->level); |
2514 | generation = btrfs_node_ptr_generation(upper->eb, slot); | 2515 | generation = btrfs_node_ptr_generation(upper->eb, slot); |
2515 | eb = read_tree_block(root, bytenr, blocksize, generation); | 2516 | eb = read_tree_block(root, bytenr, blocksize, generation); |
2517 | if (!eb) { | ||
2518 | err = -EIO; | ||
2519 | goto next; | ||
2520 | } | ||
2516 | btrfs_tree_lock(eb); | 2521 | btrfs_tree_lock(eb); |
2517 | btrfs_set_lock_blocking(eb); | 2522 | btrfs_set_lock_blocking(eb); |
2518 | 2523 | ||
@@ -2670,6 +2675,7 @@ static int get_tree_block_key(struct reloc_control *rc, | |||
2670 | BUG_ON(block->key_ready); | 2675 | BUG_ON(block->key_ready); |
2671 | eb = read_tree_block(rc->extent_root, block->bytenr, | 2676 | eb = read_tree_block(rc->extent_root, block->bytenr, |
2672 | block->key.objectid, block->key.offset); | 2677 | block->key.objectid, block->key.offset); |
2678 | BUG_ON(!eb); | ||
2673 | WARN_ON(btrfs_header_level(eb) != block->level); | 2679 | WARN_ON(btrfs_header_level(eb) != block->level); |
2674 | if (block->level == 0) | 2680 | if (block->level == 0) |
2675 | btrfs_item_key_to_cpu(eb, &block->key, 0); | 2681 | btrfs_item_key_to_cpu(eb, &block->key, 0); |