v->btree_id = b->btree_id;
bch2_btree_keys_init(v, &c->expensive_debug_checks);
- pick = bch2_btree_pick_ptr(c, b);
+ pick = bch2_btree_pick_ptr(c, b, NULL);
if (IS_ERR_OR_NULL(pick.ca))
return;
- bio = bio_alloc_bioset(GFP_NOIO, btree_pages(c), &c->btree_read_bio);
- bio->bi_bdev = pick.ca->disk_sb.bdev;
+ bio = bio_alloc_bioset(GFP_NOIO, btree_pages(c), &c->btree_bio);
+ bio_set_dev(bio, pick.ca->disk_sb.bdev);
+ bio->bi_opf = REQ_OP_READ|REQ_META;
bio->bi_iter.bi_sector = pick.ptr.offset;
bio->bi_iter.bi_size = btree_bytes(c);
- bio_set_op_attrs(bio, REQ_OP_READ, REQ_META|READ_SYNC);
bch2_bio_map(bio, n_sorted);
submit_bio_wait(bio);
bio_put(bio);
+ percpu_ref_put(&pick.ca->io_ref);
memcpy(n_ondisk, n_sorted, btree_bytes(c));
- bch2_btree_node_read_done(c, v, pick.ca, &pick.ptr);
- n_sorted = c->verify_data->data;
-
- percpu_ref_put(&pick.ca->io_ref);
+ if (bch2_btree_node_read_done(c, v, false))
+ goto out;
+ n_sorted = c->verify_data->data;
sorted = &n_sorted->keys;
inmemory = &n_inmemory->keys;
console_unlock();
panic("verify failed at %u\n", j);
}
-
+out:
mutex_unlock(&c->verify_lock);
btree_node_io_unlock(b);
}
if (!i->size)
return i->ret;
- bch2_btree_iter_init(&iter, i->c, i->id, i->from);
+ for_each_btree_key(&iter, i->c, i->id, i->from,
+ BTREE_ITER_PREFETCH, k) {
+ i->from = iter.pos;
- while ((k = bch2_btree_iter_peek(&iter)).k &&
- !(err = btree_iter_err(k))) {
bch2_bkey_val_to_text(i->c, bkey_type(0, i->id),
i->buf, sizeof(i->buf), k);
i->bytes = strlen(i->buf);
i->buf[i->bytes] = '\n';
i->bytes++;
- bch2_btree_iter_advance_pos(&iter);
- i->from = iter.pos;
-
err = flush_buf(i);
if (err)
break;
if (!i->size)
break;
}
- bch2_btree_iter_unlock(&iter);
+ err = bch2_btree_iter_unlock(&iter) ?: err;
return err < 0 ? err : i->ret;
}
if (!i->size)
return i->ret;
- bch2_btree_iter_init(&iter, i->c, i->id, i->from);
+ bch2_btree_iter_init(&iter, i->c, i->id, i->from, BTREE_ITER_PREFETCH);
while ((k = bch2_btree_iter_peek(&iter)).k &&
!(err = btree_iter_err(k))) {
- struct btree *b = iter.nodes[0];
- struct btree_node_iter *node_iter = &iter.node_iters[0];
- struct bkey_packed *_k = bch2_btree_node_iter_peek(node_iter, b);
+ struct btree_iter_level *l = &iter.l[0];
+ struct bkey_packed *_k =
+ bch2_btree_node_iter_peek(&l->iter, l->b);
- if (iter.nodes[0] != prev_node) {
- i->bytes = bch2_print_btree_node(i->c, b, i->buf,
+ if (l->b != prev_node) {
+ i->bytes = bch2_print_btree_node(i->c, l->b, i->buf,
sizeof(i->buf));
err = flush_buf(i);
if (err)
break;
}
- prev_node = iter.nodes[0];
+ prev_node = l->b;
- i->bytes = bch2_bkey_print_bfloat(b, _k, i->buf, sizeof(i->buf));
+ i->bytes = bch2_bkey_print_bfloat(l->b, _k, i->buf,
+ sizeof(i->buf));
err = flush_buf(i);
if (err)
break;
- bch2_btree_iter_advance_pos(&iter);
+ bch2_btree_iter_next(&iter);
i->from = iter.pos;
err = flush_buf(i);