summaryrefslogtreecommitdiff
path: root/fs/bcachefs/btree_io.c
diff options
context:
space:
mode:
Diffstat (limited to 'fs/bcachefs/btree_io.c')
-rw-r--r--fs/bcachefs/btree_io.c9
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));