diff options
Diffstat (limited to 'fs/btrfs/backref.c')
| -rw-r--r-- | fs/btrfs/backref.c | 10 | 
1 files changed, 8 insertions, 2 deletions
| diff --git a/fs/btrfs/backref.c b/fs/btrfs/backref.c index 23e927b191c9..04b5b3093893 100644 --- a/fs/btrfs/backref.c +++ b/fs/btrfs/backref.c @@ -423,7 +423,10 @@ static int __add_missing_keys(struct btrfs_fs_info *fs_info,  		BUG_ON(!ref->wanted_disk_byte);  		eb = read_tree_block(fs_info->tree_root, ref->wanted_disk_byte,  				     fs_info->tree_root->leafsize, 0); -		BUG_ON(!eb); +		if (!eb || !extent_buffer_uptodate(eb)) { +			free_extent_buffer(eb); +			return -EIO; +		}  		btrfs_tree_read_lock(eb);  		if (btrfs_header_level(eb) == 0)  			btrfs_item_key_to_cpu(eb, &ref->key_for_search, 0); @@ -913,7 +916,10 @@ again:  							info_level);  				eb = read_tree_block(fs_info->extent_root,  							   ref->parent, bsz, 0); -				BUG_ON(!eb); +				if (!eb || !extent_buffer_uptodate(eb)) { +					free_extent_buffer(eb); +					return -EIO; +				}  				ret = find_extent_in_eb(eb, bytenr,  							*extent_item_pos, &eie);  				ref->inode_list = eie; | 
