bcachefs: Dump journal state when we get stuck
authorKent Overstreet <kent.overstreet@gmail.com>
Wed, 24 Feb 2021 06:16:49 +0000 (01:16 -0500)
committerKent Overstreet <kent.overstreet@linux.dev>
Sun, 22 Oct 2023 21:08:54 +0000 (17:08 -0400)
We had a bug reported where the journal is failing to allocate a journal
write - this should help figure out what's going on.

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

index 40d452cedffdb883aa6f8d9ba1fe2c27b7db80c6..fdd5a837902c6c802ad396800cc776fcc279b4d3 100644 (file)
@@ -1383,6 +1383,7 @@ void bch2_journal_write(struct closure *cl)
        struct jset_entry *start, *end;
        struct jset *jset;
        struct bio *bio;
+       char *journal_debug_buf = NULL;
        bool validate_before_checksum = false;
        unsigned i, sectors, bytes, u64s, nr_rw_members = 0;
        int ret;
@@ -1484,6 +1485,12 @@ retry_alloc:
                goto retry_alloc;
        }
 
+       if (ret) {
+               journal_debug_buf = kmalloc(4096, GFP_ATOMIC);
+               if (journal_debug_buf)
+                       __bch2_journal_debug_to_text(&_PBUF(journal_debug_buf, 4096), j);
+       }
+
        /*
         * write is allocated, no longer need to account for it in
         * bch2_journal_space_available():
@@ -1498,7 +1505,9 @@ retry_alloc:
        spin_unlock(&j->lock);
 
        if (ret) {
-               bch_err(c, "Unable to allocate journal write");
+               bch_err(c, "Unable to allocate journal write:\n%s",
+                       journal_debug_buf);
+               kfree(journal_debug_buf);
                bch2_fatal_error(c);
                continue_at(cl, journal_write_done, system_highpri_wq);
                return;