diff options
Diffstat (limited to 'libbcachefs/debug.c')
-rw-r--r-- | libbcachefs/debug.c | 12 |
1 files changed, 8 insertions, 4 deletions
diff --git a/libbcachefs/debug.c b/libbcachefs/debug.c index 7190990d..71f649bc 100644 --- a/libbcachefs/debug.c +++ b/libbcachefs/debug.c @@ -36,6 +36,7 @@ void __bch2_btree_verify(struct bch_fs *c, struct btree *b) struct btree_node *n_ondisk, *n_sorted, *n_inmemory; struct bset *sorted, *inmemory; struct extent_pick_ptr pick; + struct bch_dev *ca; struct bio *bio; if (c->opts.nochanges) @@ -54,12 +55,15 @@ void __bch2_btree_verify(struct bch_fs *c, struct btree *b) v->btree_id = b->btree_id; bch2_btree_keys_init(v, &c->expensive_debug_checks); - pick = bch2_btree_pick_ptr(c, b, NULL); - if (IS_ERR_OR_NULL(pick.ca)) + if (bch2_btree_pick_ptr(c, b, NULL, &pick) <= 0) + return; + + ca = bch_dev_bkey_exists(c, pick.ptr.dev); + if (!bch2_dev_get_ioref(ca, READ)) return; bio = bio_alloc_bioset(GFP_NOIO, btree_pages(c), &c->btree_bio); - bio_set_dev(bio, pick.ca->disk_sb.bdev); + bio_set_dev(bio, 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); @@ -68,7 +72,7 @@ void __bch2_btree_verify(struct bch_fs *c, struct btree *b) submit_bio_wait(bio); bio_put(bio); - percpu_ref_put(&pick.ca->io_ref); + percpu_ref_put(&ca->io_ref); memcpy(n_ondisk, n_sorted, btree_bytes(c)); |