bcachefs: Fix lifetime in bch2_write_done(), add assertion
authorKent Overstreet <kent.overstreet@linux.dev>
Sat, 12 Aug 2023 20:52:33 +0000 (16:52 -0400)
committerKent Overstreet <kent.overstreet@linux.dev>
Sun, 22 Oct 2023 21:10:10 +0000 (17:10 -0400)
We're hunting for an open_bucket leak, add an assertion to help track it
down: also, we can't use the bch_fs after dropping our write ref to it.

Signed-off-by: Kent Overstreet <kent.overstreet@linux.dev>
fs/bcachefs/io.c

index f42d9da2e16e855022da589a55ef97d00859e83d..499585d7cc5d3bb8192e91fcfdcf6b685ac801c5 100644 (file)
@@ -710,13 +710,15 @@ static void bch2_write_done(struct closure *cl)
        struct bch_write_op *op = container_of(cl, struct bch_write_op, cl);
        struct bch_fs *c = op->c;
 
+       EBUG_ON(op->open_buckets.nr);
+
+       bch2_time_stats_update(&c->times[BCH_TIME_data_write], op->start_time);
        bch2_disk_reservation_put(c, &op->res);
+
        if (!(op->flags & BCH_WRITE_MOVE))
                bch2_write_ref_put(c, BCH_WRITE_REF_write);
        bch2_keylist_free(&op->insert_keys, op->inline_keys);
 
-       bch2_time_stats_update(&c->times[BCH_TIME_data_write], op->start_time);
-
        EBUG_ON(cl->parent);
        closure_debug_destroy(cl);
        if (op->end_io)