Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

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

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
Loading
Loading
Loading
Loading
+3 −0
Original line number Diff line number Diff line
@@ -682,6 +682,8 @@ int btrfs_realloc_node(struct btrfs_trans_handle *trans,
			if (!cur) {
				cur = read_tree_block(root, blocknr,
							 blocksize, gen);
				if (!cur)
					return -EIO;
			} else if (!uptodate) {
				btrfs_read_buffer(cur, gen);
			}
@@ -4087,6 +4089,7 @@ int btrfs_search_forward(struct btrfs_root *root, struct btrfs_key *min_key,
		}
		btrfs_set_path_blocking(path);
		cur = read_node_slot(root, cur, slot);
		BUG_ON(!cur);

		btrfs_tree_lock(cur);

+6 −0
Original line number Diff line number Diff line
@@ -6067,6 +6067,8 @@ static noinline int do_walk_down(struct btrfs_trans_handle *trans,
		if (reada && level == 1)
			reada_walk_down(trans, root, wc, path);
		next = read_tree_block(root, bytenr, blocksize, generation);
		if (!next)
			return -EIO;
		btrfs_tree_lock(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,
					     block_size, 0);
			if (!eb) {
				ret = -EIO;
				goto out;
			}
			btrfs_tree_lock(eb);
			BUG_ON(level != btrfs_header_level(eb));

+6 −0
Original line number Diff line number Diff line
@@ -1724,6 +1724,7 @@ int replace_path(struct btrfs_trans_handle *trans,

			eb = read_tree_block(dest, old_bytenr, blocksize,
					     old_ptr_gen);
			BUG_ON(!eb);
			btrfs_tree_lock(eb);
			if (cow) {
				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);
		generation = btrfs_node_ptr_generation(upper->eb, slot);
		eb = read_tree_block(root, bytenr, blocksize, generation);
		if (!eb) {
			err = -EIO;
			goto next;
		}
		btrfs_tree_lock(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);
	eb = read_tree_block(rc->extent_root, block->bytenr,
			     block->key.objectid, block->key.offset);
	BUG_ON(!eb);
	WARN_ON(btrfs_header_level(eb) != block->level);
	if (block->level == 0)
		btrfs_item_key_to_cpu(eb, &block->key, 0);