On Tue, 17 Mar 2015, Taesoo Kim wrote: > Date: Tue, 17 Mar 2015 22:08:38 -0400 > From: Taesoo Kim <tsgat...@gmail.com> > To: ty...@mit.edu, linux-e...@vger.kernel.org, linux-kernel@vger.kernel.org > Cc: tae...@gatech.edu, chang...@gatech.edu, sanid...@gatech.edu, > b...@gatech.edu, cson...@gatech.edu, Taesoo Kim <tsgat...@gmail.com> > 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 <lczer...@redhat.com> 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 <tsgat...@gmail.com> > --- > 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 majord...@vger.kernel.org > 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 majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/