aboutsummaryrefslogtreecommitdiffstats
path: root/fs
diff options
context:
space:
mode:
authorTsutomu Itoh <t-itoh@jp.fujitsu.com>2011-03-24 02:33:21 -0400
committerroot <Chris Mason chris.mason@oracle.com>2011-03-28 05:37:37 -0400
commit97d9a8a420444eb5b5c071d4b3b9c4100a7ae015 (patch)
tree4ed3e77541ebcc4885c4a10630e2f6bf94d3cef2 /fs
parent7e75bf3ff3a716d7b21d8fb43bf823115801c1e9 (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')
-rw-r--r--fs/btrfs/ctree.c3
-rw-r--r--fs/btrfs/extent-tree.c6
-rw-r--r--fs/btrfs/relocation.c6
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);