diff options
Diffstat (limited to 'fs/btrfs/ctree.c')
-rw-r--r-- | fs/btrfs/ctree.c | 16 |
1 files changed, 10 insertions, 6 deletions
diff --git a/fs/btrfs/ctree.c b/fs/btrfs/ctree.c index 0f11ebc92f02..54114b4887dd 100644 --- a/fs/btrfs/ctree.c +++ b/fs/btrfs/ctree.c | |||
@@ -1439,8 +1439,9 @@ get_old_root(struct btrfs_root *root, u64 time_seq) | |||
1439 | btrfs_tree_read_unlock(eb_root); | 1439 | btrfs_tree_read_unlock(eb_root); |
1440 | free_extent_buffer(eb_root); | 1440 | free_extent_buffer(eb_root); |
1441 | old = read_tree_block(root, logical, 0); | 1441 | old = read_tree_block(root, logical, 0); |
1442 | if (WARN_ON(!old || !extent_buffer_uptodate(old))) { | 1442 | if (WARN_ON(IS_ERR(old) || !extent_buffer_uptodate(old))) { |
1443 | free_extent_buffer(old); | 1443 | if (!IS_ERR(old)) |
1444 | free_extent_buffer(old); | ||
1444 | btrfs_warn(root->fs_info, | 1445 | btrfs_warn(root->fs_info, |
1445 | "failed to read tree block %llu from get_old_root", logical); | 1446 | "failed to read tree block %llu from get_old_root", logical); |
1446 | } else { | 1447 | } else { |
@@ -1685,7 +1686,9 @@ int btrfs_realloc_node(struct btrfs_trans_handle *trans, | |||
1685 | if (!cur || !uptodate) { | 1686 | if (!cur || !uptodate) { |
1686 | if (!cur) { | 1687 | if (!cur) { |
1687 | cur = read_tree_block(root, blocknr, gen); | 1688 | cur = read_tree_block(root, blocknr, gen); |
1688 | if (!cur || !extent_buffer_uptodate(cur)) { | 1689 | if (IS_ERR(cur)) { |
1690 | return PTR_ERR(cur); | ||
1691 | } else if (!extent_buffer_uptodate(cur)) { | ||
1689 | free_extent_buffer(cur); | 1692 | free_extent_buffer(cur); |
1690 | return -EIO; | 1693 | return -EIO; |
1691 | } | 1694 | } |
@@ -1864,8 +1867,9 @@ static noinline struct extent_buffer *read_node_slot(struct btrfs_root *root, | |||
1864 | 1867 | ||
1865 | eb = read_tree_block(root, btrfs_node_blockptr(parent, slot), | 1868 | eb = read_tree_block(root, btrfs_node_blockptr(parent, slot), |
1866 | btrfs_node_ptr_generation(parent, slot)); | 1869 | btrfs_node_ptr_generation(parent, slot)); |
1867 | if (eb && !extent_buffer_uptodate(eb)) { | 1870 | if (IS_ERR(eb) || !extent_buffer_uptodate(eb)) { |
1868 | free_extent_buffer(eb); | 1871 | if (!IS_ERR(eb)) |
1872 | free_extent_buffer(eb); | ||
1869 | eb = NULL; | 1873 | eb = NULL; |
1870 | } | 1874 | } |
1871 | 1875 | ||
@@ -2494,7 +2498,7 @@ read_block_for_search(struct btrfs_trans_handle *trans, | |||
2494 | 2498 | ||
2495 | ret = -EAGAIN; | 2499 | ret = -EAGAIN; |
2496 | tmp = read_tree_block(root, blocknr, 0); | 2500 | tmp = read_tree_block(root, blocknr, 0); |
2497 | if (tmp) { | 2501 | if (!IS_ERR(tmp)) { |
2498 | /* | 2502 | /* |
2499 | * If the read above didn't mark this buffer up to date, | 2503 | * If the read above didn't mark this buffer up to date, |
2500 | * it will never end up being up to date. Set ret to EIO now | 2504 | * it will never end up being up to date. Set ret to EIO now |