On Tue 23-07-24 16:44:00, Luis Henriques (SUSE) wrote: > Function __jbd2_log_wait_for_space() assumes that '0' is not a valid value > for transaction IDs, which is incorrect. Don't assume that and invoke > jbd2_log_wait_commit() if the journal had a committing transaction instead. > > Signed-off-by: Luis Henriques (SUSE) <luis.henriques@xxxxxxxxx> Looks good. Feel free to add: Reviewed-by: Jan Kara <jack@xxxxxxx> Honza > --- > fs/jbd2/checkpoint.c | 7 +++++-- > 1 file changed, 5 insertions(+), 2 deletions(-) > > diff --git a/fs/jbd2/checkpoint.c b/fs/jbd2/checkpoint.c > index 951f78634adf..77bc522e6821 100644 > --- a/fs/jbd2/checkpoint.c > +++ b/fs/jbd2/checkpoint.c > @@ -79,9 +79,12 @@ __releases(&journal->j_state_lock) > if (space_left < nblocks) { > int chkpt = journal->j_checkpoint_transactions != NULL; > tid_t tid = 0; > + bool has_transaction = false; > > - if (journal->j_committing_transaction) > + if (journal->j_committing_transaction) { > tid = journal->j_committing_transaction->t_tid; > + has_transaction = true; > + } > spin_unlock(&journal->j_list_lock); > write_unlock(&journal->j_state_lock); > if (chkpt) { > @@ -89,7 +92,7 @@ __releases(&journal->j_state_lock) > } else if (jbd2_cleanup_journal_tail(journal) == 0) { > /* We were able to recover space; yay! */ > ; > - } else if (tid) { > + } else if (has_transaction) { > /* > * jbd2_journal_commit_transaction() may want > * to take the checkpoint_mutex if JBD2_FLUSHED > -- Jan Kara <jack@xxxxxxxx> SUSE Labs, CR