aboutsummaryrefslogtreecommitdiff
path: root/fs/bcachefs/journal_reclaim.c
diff options
context:
space:
mode:
authorGravatar Brian Foster <bfoster@redhat.com> 2023-03-21 08:09:16 -0400
committerGravatar Kent Overstreet <kent.overstreet@linux.dev> 2023-10-22 17:09:58 -0400
commit030e9f9264a9d6bbbdb29ed20429bf943ed34315 (patch)
tree8abf4173c79f5953a94bda4701c2819a6d9caa29 /fs/bcachefs/journal_reclaim.c
parentbcachefs: refactor journal stuck checking into standalone helper (diff)
downloadlinux-030e9f9264a9d6bbbdb29ed20429bf943ed34315.tar.gz
linux-030e9f9264a9d6bbbdb29ed20429bf943ed34315.tar.bz2
linux-030e9f9264a9d6bbbdb29ed20429bf943ed34315.zip
bcachefs: drop unnecessary journal stuck check from space calculation
The journal stucking check in bch2_journal_space_available() is particularly aggressive and can lead to premature shutdown in some rare cases. This is difficult to reproduce, but also comes along with a fatal error and so is worthwhile to be cautious. For example, we've seen instances where the journal is under heavy reservation pressure, the journal allocation path transitions into the final available journal bucket, the journal write path immediately consumes that bucket and calls into bch2_journal_space_available(), which then in turn flags the journal as stuck because there is no available space and shuts down the filesystem instead of submitting the journal write (that would have otherwise succeeded). To avoid this problem, simplify the journal stuck checking by just relying on the higher level logic in the journal reservation path. This produces more useful debug output and is a more reliable indicator that things have bogged down. Signed-off-by: Brian Foster <bfoster@redhat.com> Signed-off-by: Kent Overstreet <kent.overstreet@linux.dev>
Diffstat (limited to 'fs/bcachefs/journal_reclaim.c')
-rw-r--r--fs/bcachefs/journal_reclaim.c19
1 files changed, 1 insertions, 18 deletions
diff --git a/fs/bcachefs/journal_reclaim.c b/fs/bcachefs/journal_reclaim.c
index a484a62f9cbd..29d843e6d6d4 100644
--- a/fs/bcachefs/journal_reclaim.c
+++ b/fs/bcachefs/journal_reclaim.c
@@ -210,24 +210,7 @@ void bch2_journal_space_available(struct journal *j)
clean = j->space[journal_space_clean].total;
total = j->space[journal_space_total].total;
- if (!clean_ondisk &&
- journal_cur_seq(j) == j->seq_ondisk) {
- struct printbuf buf = PRINTBUF;
-
- __bch2_journal_debug_to_text(&buf, j);
- bch_err(c, "journal stuck\n%s", buf.buf);
- printbuf_exit(&buf);
-
- /*
- * Hack: bch2_fatal_error() calls bch2_journal_halt() which
- * takes journal lock:
- */
- spin_unlock(&j->lock);
- bch2_fatal_error(c);
- spin_lock(&j->lock);
-
- ret = JOURNAL_ERR_journal_stuck;
- } else if (!j->space[journal_space_discarded].next_entry)
+ if (!j->space[journal_space_discarded].next_entry)
ret = JOURNAL_ERR_journal_full;
if ((j->space[journal_space_clean_ondisk].next_entry <