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, | |||
423 | BUG_ON(!ref->wanted_disk_byte); | 423 | BUG_ON(!ref->wanted_disk_byte); |
424 | eb = read_tree_block(fs_info->tree_root, ref->wanted_disk_byte, | 424 | eb = read_tree_block(fs_info->tree_root, ref->wanted_disk_byte, |
425 | fs_info->tree_root->leafsize, 0); | 425 | fs_info->tree_root->leafsize, 0); |
426 | BUG_ON(!eb); | 426 | if (!eb || !extent_buffer_uptodate(eb)) { |
427 | free_extent_buffer(eb); | ||
428 | return -EIO; | ||
429 | } | ||
427 | btrfs_tree_read_lock(eb); | 430 | btrfs_tree_read_lock(eb); |
428 | if (btrfs_header_level(eb) == 0) | 431 | if (btrfs_header_level(eb) == 0) |
429 | btrfs_item_key_to_cpu(eb, &ref->key_for_search, 0); | 432 | btrfs_item_key_to_cpu(eb, &ref->key_for_search, 0); |
@@ -913,7 +916,10 @@ again: | |||
913 | info_level); | 916 | info_level); |
914 | eb = read_tree_block(fs_info->extent_root, | 917 | eb = read_tree_block(fs_info->extent_root, |
915 | ref->parent, bsz, 0); | 918 | ref->parent, bsz, 0); |
916 | BUG_ON(!eb); | 919 | if (!eb || !extent_buffer_uptodate(eb)) { |
920 | free_extent_buffer(eb); | ||
921 | return -EIO; | ||
922 | } | ||
917 | ret = find_extent_in_eb(eb, bytenr, | 923 | ret = find_extent_in_eb(eb, bytenr, |
918 | *extent_item_pos, &eie); | 924 | *extent_item_pos, &eie); |
919 | ref->inode_list = eie; | 925 | ref->inode_list = eie; |