|
@@ -923,9 +923,16 @@ again:
|
|
|
path2->slots[level]--;
|
|
|
|
|
|
eb = path2->nodes[level];
|
|
|
- WARN_ON(btrfs_node_blockptr(eb, path2->slots[level]) !=
|
|
|
- cur->bytenr);
|
|
|
-
|
|
|
+ if (btrfs_node_blockptr(eb, path2->slots[level]) !=
|
|
|
+ cur->bytenr) {
|
|
|
+ btrfs_err(root->fs_info,
|
|
|
+ "couldn't find block (%llu) (level %d) in tree (%llu) with key (%llu %u %llu)",
|
|
|
+ cur->bytenr, level - 1, root->objectid,
|
|
|
+ node_key->objectid, node_key->type,
|
|
|
+ node_key->offset);
|
|
|
+ err = -ENOENT;
|
|
|
+ goto out;
|
|
|
+ }
|
|
|
lower = cur;
|
|
|
need_check = true;
|
|
|
for (; level < BTRFS_MAX_LEVEL; level++) {
|
|
@@ -2686,11 +2693,15 @@ static int do_relocation(struct btrfs_trans_handle *trans,
|
|
|
|
|
|
if (!upper->eb) {
|
|
|
ret = btrfs_search_slot(trans, root, key, path, 0, 1);
|
|
|
- if (ret < 0) {
|
|
|
- err = ret;
|
|
|
+ if (ret) {
|
|
|
+ if (ret < 0)
|
|
|
+ err = ret;
|
|
|
+ else
|
|
|
+ err = -ENOENT;
|
|
|
+
|
|
|
+ btrfs_release_path(path);
|
|
|
break;
|
|
|
}
|
|
|
- BUG_ON(ret > 0);
|
|
|
|
|
|
if (!upper->eb) {
|
|
|
upper->eb = path->nodes[upper->level];
|