clear_btree_node_write_in_flight_inner(b);
        clear_btree_node_write_in_flight(b);
+       smp_mb__after_atomic();
        wake_up_bit(&b->flags, BTREE_NODE_write_in_flight);
 }
 
 
        printbuf_exit(&buf);
        clear_btree_node_read_in_flight(b);
+       smp_mb__after_atomic();
        wake_up_bit(&b->flags, BTREE_NODE_read_in_flight);
 }
 
        printbuf_exit(&buf);
 
        clear_btree_node_read_in_flight(b);
+       smp_mb__after_atomic();
        wake_up_bit(&b->flags, BTREE_NODE_read_in_flight);
 }
 
                set_btree_node_read_error(b);
                bch2_btree_lost_data(c, b->c.btree_id);
                clear_btree_node_read_in_flight(b);
+               smp_mb__after_atomic();
                wake_up_bit(&b->flags, BTREE_NODE_read_in_flight);
                printbuf_exit(&buf);
                return;
 
        if (new & (1U << BTREE_NODE_write_in_flight))
                __bch2_btree_node_write(c, b, BTREE_WRITE_ALREADY_STARTED|type);
-       else
+       else {
+               smp_mb__after_atomic();
                wake_up_bit(&b->flags, BTREE_NODE_write_in_flight);
+       }
 }
 
 static void btree_node_write_done(struct bch_fs *c, struct btree *b, u64 start_time)
        }
 
        clear_btree_node_write_in_flight_inner(b);
+       smp_mb__after_atomic();
        wake_up_bit(&b->flags, BTREE_NODE_write_in_flight_inner);
        INIT_WORK(&wb->work, btree_node_write_work);
        queue_work(c->btree_io_complete_wq, &wb->work);