|
@@ -4573,17 +4573,25 @@ static int process_all_extents(struct send_ctx *sctx)
|
|
|
key.objectid = sctx->cmp_key->objectid;
|
|
|
key.type = BTRFS_EXTENT_DATA_KEY;
|
|
|
key.offset = 0;
|
|
|
- while (1) {
|
|
|
- ret = btrfs_search_slot_for_read(root, &key, path, 1, 0);
|
|
|
- if (ret < 0)
|
|
|
- goto out;
|
|
|
- if (ret) {
|
|
|
- ret = 0;
|
|
|
- goto out;
|
|
|
- }
|
|
|
+ ret = btrfs_search_slot(NULL, root, &key, path, 0, 0);
|
|
|
+ if (ret < 0)
|
|
|
+ goto out;
|
|
|
|
|
|
+ while (1) {
|
|
|
eb = path->nodes[0];
|
|
|
slot = path->slots[0];
|
|
|
+
|
|
|
+ if (slot >= btrfs_header_nritems(eb)) {
|
|
|
+ ret = btrfs_next_leaf(root, path);
|
|
|
+ if (ret < 0) {
|
|
|
+ goto out;
|
|
|
+ } else if (ret > 0) {
|
|
|
+ ret = 0;
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+
|
|
|
btrfs_item_key_to_cpu(eb, &found_key, slot);
|
|
|
|
|
|
if (found_key.objectid != key.objectid ||
|
|
@@ -4596,8 +4604,7 @@ static int process_all_extents(struct send_ctx *sctx)
|
|
|
if (ret < 0)
|
|
|
goto out;
|
|
|
|
|
|
- btrfs_release_path(path);
|
|
|
- key.offset = found_key.offset + 1;
|
|
|
+ path->slots[0]++;
|
|
|
}
|
|
|
|
|
|
out:
|