diff options
Diffstat (limited to 'fs/bcachefs/btree_io.c')
-rw-r--r-- | fs/bcachefs/btree_io.c | 9 |
1 files changed, 6 insertions, 3 deletions
diff --git a/fs/bcachefs/btree_io.c b/fs/bcachefs/btree_io.c index 847dfd685eac..22a8f50f37ed 100644 --- a/fs/bcachefs/btree_io.c +++ b/fs/bcachefs/btree_io.c @@ -1385,7 +1385,8 @@ start: bch2_time_stats_update(&c->times[BCH_TIME_btree_read], rb->start_time); bio_put(&rb->bio); - clear_btree_node_read_in_flight(b); + + clear_bit_unlock(BTREE_NODE_read_in_flight, &b->flags); wake_up_bit(&b->flags, BTREE_NODE_read_in_flight); } @@ -1413,11 +1414,15 @@ void bch2_btree_node_read(struct bch_fs *c, struct btree *b, int ret; trace_btree_read(c, b); + set_btree_node_read_in_flight(b); ret = bch2_btree_pick_ptr(c, b, NULL, &pick); if (bch2_fs_fatal_err_on(ret <= 0, c, "btree node read error: no device to read from")) { set_btree_node_read_error(b); + + clear_bit_unlock(BTREE_NODE_read_in_flight, &b->flags); + wake_up_bit(&b->flags, BTREE_NODE_read_in_flight); return; } @@ -1437,8 +1442,6 @@ void bch2_btree_node_read(struct bch_fs *c, struct btree *b, bio->bi_private = b; bch2_bio_map(bio, b->data); - set_btree_node_read_in_flight(b); - if (rb->have_ioref) { this_cpu_add(ca->io_done->sectors[READ][BCH_DATA_BTREE], bio_sectors(bio)); |