]> www.infradead.org Git - nvme.git/commitdiff
bcachefs: Fix lost wakeup on journal shutdown
authorKent Overstreet <kent.overstreet@linux.dev>
Tue, 19 Mar 2024 02:18:02 +0000 (22:18 -0400)
committerKent Overstreet <kent.overstreet@linux.dev>
Tue, 19 Mar 2024 03:35:42 +0000 (23:35 -0400)
We need to check for journal shutdown first in __journal_res_get() -
after the journal is shutdown, j->watermark won't be changing anymore.

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

index f314b2e78ec368718e671651a99752de374a838f..9c9a25dbd6137a6d51205c80cbf8d931fda918ef 100644 (file)
@@ -511,18 +511,18 @@ retry:
        if (journal_res_get_fast(j, res, flags))
                return 0;
 
+       if (bch2_journal_error(j))
+               return -BCH_ERR_erofs_journal_err;
+
+       if (j->blocked)
+               return -BCH_ERR_journal_res_get_blocked;
+
        if ((flags & BCH_WATERMARK_MASK) < j->watermark) {
                ret = JOURNAL_ERR_journal_full;
                can_discard = j->can_discard;
                goto out;
        }
 
-       if (j->blocked)
-               return -BCH_ERR_journal_res_get_blocked;
-
-       if (bch2_journal_error(j))
-               return -BCH_ERR_erofs_journal_err;
-
        if (nr_unwritten_journal_entries(j) == ARRAY_SIZE(j->buf) && !journal_entry_is_open(j)) {
                ret = JOURNAL_ERR_max_in_flight;
                goto out;