On Tue, 17 Mar 2015, Taesoo Kim wrote: > Date: Tue, 17 Mar 2015 22:08:38 -0400 > From: Taesoo Kim <[email protected]> > To: [email protected], [email protected], [email protected] > Cc: [email protected], [email protected], [email protected], > [email protected], [email protected], Taesoo Kim <[email protected]> > 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 <[email protected]> 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 <[email protected]> > --- > 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 [email protected] > More majordomo info at http://vger.kernel.org/majordomo-info.html > -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to [email protected] More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/

