diff --git a/fs/btrfs/ctree.c b/fs/btrfs/ctree.c index a4cb4b642987..7599bbf30881 100644 --- a/fs/btrfs/ctree.c +++ b/fs/btrfs/ctree.c @@ -2246,8 +2246,10 @@ int btrfs_search_slot(struct btrfs_trans_handle *trans, struct btrfs_root *root, p->slots[level] = slot; err = setup_nodes_for_search(trans, root, p, b, level, ins_len, &write_lock_level); - if (err == -EAGAIN) + if (err == -EAGAIN) { + btrfs_release_path(p); goto again; + } if (err) { ret = err; goto done; @@ -2276,8 +2278,10 @@ 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) { + btrfs_release_path(p); goto again; + } if (err) { ret = err; goto done;