bcachefs: Don't submit bio in write path under lock
authorKent Overstreet <kent.overstreet@gmail.com>
Mon, 21 Oct 2019 23:58:06 +0000 (19:58 -0400)
committerKent Overstreet <kent.overstreet@linux.dev>
Sun, 22 Oct 2023 21:08:30 +0000 (17:08 -0400)
Signed-off-by: Kent Overstreet <kent.overstreet@linux.dev>
fs/bcachefs/io.c

index d6d777bb53dafab4bfb2a202880a81e7ba41d8d8..6d416f71f0553bdd58e57317e14928bf444eeab4 100644 (file)
@@ -1008,6 +1008,8 @@ do_write:
                                bkey_start_pos(&key_to_write->k),
                                total_input >> 9);
 
+       bch2_alloc_sectors_done(c, wp);
+
        dst->bi_end_io  = bch2_write_endio;
        dst->bi_private = &op->cl;
        dst->bi_opf     = REQ_OP_WRITE;
@@ -1022,6 +1024,8 @@ csum_err:
                "rewriting existing data (memory corruption?)");
        ret = -EIO;
 err:
+       bch2_alloc_sectors_done(c, wp);
+
        if (to_wbio(dst)->bounce)
                bch2_bio_free_pages_pool(c, dst);
        if (to_wbio(dst)->put_bio)
@@ -1072,10 +1076,9 @@ again:
                        goto flush_io;
                }
 
-               ret = bch2_write_extent(op, wp);
-
                bch2_open_bucket_get(c, wp, &op->open_buckets);
-               bch2_alloc_sectors_done(c, wp);
+
+               ret = bch2_write_extent(op, wp);
 
                if (ret < 0)
                        goto err;