bcachefs: Change journal_io.c assertion to error message
authorKent Overstreet <kent.overstreet@gmail.com>
Mon, 21 Mar 2022 00:12:53 +0000 (20:12 -0400)
committerKent Overstreet <kent.overstreet@linux.dev>
Sun, 22 Oct 2023 21:09:28 +0000 (17:09 -0400)
Something funny is going on with the new code for restoring the journal
write point, and it's hard to reproduce.

We do want to debug this because resuming writing to the journal in the
wrong spot could be something serious. For now, replace the assertion
with an error message and revert to old behaviour when it happens.

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

index ba43e5771c7cce59db715c55a9e4887c916d665c..b2c3ee336c1f071ff78e493be7ea5ca68dbf1025 100644 (file)
@@ -964,8 +964,16 @@ static void bch2_journal_read_device(struct closure *cl)
        }
        mutex_unlock(&jlist->lock);
 
-       BUG_ON(ja->bucket_seq[ja->cur_idx] &&
-              ja->sectors_free == ca->mi.bucket_size);
+       if (ja->bucket_seq[ja->cur_idx] &&
+           ja->sectors_free == ca->mi.bucket_size) {
+               bch_err(c, "ja->sectors_free == ca->mi.bucket_size");
+               bch_err(c, "cur_idx %u/%u", ja->cur_idx, ja->nr);
+               for (i = 0; i < 3; i++) {
+                       unsigned idx = (ja->cur_idx + ja->nr - 1 + i) % ja->nr;
+                       bch_err(c, "bucket_seq[%u] = %llu", idx, ja->bucket_seq[idx]);
+               }
+               ja->sectors_free = 0;
+       }
 
        /*
         * Set dirty_idx to indicate the entire journal is full and needs to be