On Tue, 17 Mar 2015, Taesoo Kim wrote: > Date: Tue, 17 Mar 2015 22:08:38 -0400 > From: Taesoo Kim <tsgatesv@xxxxxxxxx> > To: tytso@xxxxxxx, linux-ext4@xxxxxxxxxxxxxxx, linux-kernel@xxxxxxxxxxxxxxx > Cc: taesoo@xxxxxxxxxx, changwoo@xxxxxxxxxx, sanidhya@xxxxxxxxxx, > blee@xxxxxxxxxx, csong84@xxxxxxxxxx, Taesoo Kim <tsgatesv@xxxxxxxxx> > Subject: [PATCH 1/1] jbd2: fix incorrect unlock on j_list_lock > > When 'jh->b_transaction == transaction' (asserted by below) > > J_ASSERT_JH(jh, (jh->b_transaction == transaction || ... > > 'journal->j_list_lock' will be incorrectly unlocked, since > the the lock is aquired only at the end of if / else-if > statements (missing the else case). The patch looks good, thanks. Reviewed-by: Lukas Czerner <lczerner@xxxxxxxxxx> Btw, were you able to reproduce the problem, or have you seen the problem in the wild ? Or did you just spot it in the code ? Thanks! -Lukas > > Signed-off-by: Taesoo Kim <tsgatesv@xxxxxxxxx> > --- > fs/jbd2/transaction.c | 3 ++- > 1 file changed, 2 insertions(+), 1 deletion(-) > > diff --git a/fs/jbd2/transaction.c b/fs/jbd2/transaction.c > index 5f09370..edb7f59 100644 > --- a/fs/jbd2/transaction.c > +++ b/fs/jbd2/transaction.c > @@ -1091,6 +1091,7 @@ int jbd2_journal_get_create_access(handle_t *handle, struct buffer_head *bh) > JBUFFER_TRACE(jh, "file as BJ_Reserved"); > spin_lock(&journal->j_list_lock); > __jbd2_journal_file_buffer(jh, transaction, BJ_Reserved); > + spin_unlock(&journal->j_list_lock); > } else if (jh->b_transaction == journal->j_committing_transaction) { > /* first access by this transaction */ > jh->b_modified = 0; > @@ -1098,8 +1099,8 @@ int jbd2_journal_get_create_access(handle_t *handle, struct buffer_head *bh) > JBUFFER_TRACE(jh, "set next transaction"); > spin_lock(&journal->j_list_lock); > jh->b_next_transaction = transaction; > + spin_unlock(&journal->j_list_lock); > } > - spin_unlock(&journal->j_list_lock); > jbd_unlock_bh_state(bh); > > /* > -- > 2.3.3 > > -- > To unsubscribe from this list: send the line "unsubscribe linux-ext4" in > the body of a message to majordomo@xxxxxxxxxxxxxxx > More majordomo info at http://vger.kernel.org/majordomo-info.html > -- To unsubscribe from this list: send the line "unsubscribe linux-ext4" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html