diff --git a/fs/btrfs/ctree.c b/fs/btrfs/ctree.c index a4cb4b642987..41e87f850b54 100644 --- a/fs/btrfs/ctree.c +++ b/fs/btrfs/ctree.c @@ -2276,8 +2276,9 @@ int btrfs_search_slot(struct btrfs_trans_handle *trans, struct btrfs_root *root, } err = read_block_for_search(root, p, &b, level, slot, key); - if (err == -EAGAIN) + if (err == -EAGAIN || err == -EUCLEAN || err == -EIO) goto again; + if (err) { ret = err; goto done;