From cfda31c03315ac8cf2a57142f5a6c7510b3f3706 Mon Sep 17 00:00:00 2001 From: Kent Overstreet Date: Tue, 19 Sep 2023 22:36:30 -0400 Subject: [PATCH] bcachefs: drop journal lock before calling journal_write bch2_journal_write() expects process context, it takes journal_lock as needed. Reported-by: Dan Carpenter Signed-off-by: Kent Overstreet --- fs/bcachefs/journal_io.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/fs/bcachefs/journal_io.c b/fs/bcachefs/journal_io.c index 269c8e8a1d953..6a3d6a374e9cc 100644 --- a/fs/bcachefs/journal_io.c +++ b/fs/bcachefs/journal_io.c @@ -1554,6 +1554,7 @@ static void journal_write_done(struct closure *cl) if (!journal_state_count(new, new.unwritten_idx) && journal_last_unwritten_seq(j) <= journal_cur_seq(j)) { + spin_unlock(&j->lock); closure_call(&j->io, bch2_journal_write, c->io_complete_wq, NULL); } else if (journal_last_unwritten_seq(j) == journal_cur_seq(j) && new.cur_entry_offset < JOURNAL_ENTRY_CLOSED_VAL) { @@ -1566,10 +1567,11 @@ static void journal_write_done(struct closure *cl) * might want to be written now: */ + spin_unlock(&j->lock); mod_delayed_work(c->io_complete_wq, &j->write_work, max(0L, delta)); + } else { + spin_unlock(&j->lock); } - - spin_unlock(&j->lock); } static void journal_write_endio(struct bio *bio) -- 2.30.2