Skip to content

Commit

Permalink
jbd2: Call the commit callback before the transaction could get dropped
Browse files Browse the repository at this point in the history
The transaction can potentially get dropped if there are no buffers
that need to be written.  Make sure we call the commit callback before
potentially deciding to drop the transaction.  Also avoid
dereferencing the commit_transaction pointer in the marker for the
same reason.

This patch fixes the bug reported by Eric Paris at:
http://bugzilla.kernel.org/show_bug.cgi?id=11838

Signed-off-by: "Theodore Ts'o" <tytso@mit.edu>
Acked-by: Eric Sandeen <sandeen@redhat.com>
Tested-by: Eric Paris <eparis@redhat.com>
  • Loading branch information
Theodore Ts'o committed Oct 29, 2008
1 parent ef2cabf commit 6c20ec8
Showing 1 changed file with 4 additions and 4 deletions.
8 changes: 4 additions & 4 deletions fs/jbd2/commit.c
Original file line number Diff line number Diff line change
Expand Up @@ -974,6 +974,9 @@ void jbd2_journal_commit_transaction(journal_t *journal)
journal->j_committing_transaction = NULL;
spin_unlock(&journal->j_state_lock);

if (journal->j_commit_callback)
journal->j_commit_callback(journal, commit_transaction);

if (commit_transaction->t_checkpoint_list == NULL &&
commit_transaction->t_checkpoint_io_list == NULL) {
__jbd2_journal_drop_transaction(journal, commit_transaction);
Expand All @@ -995,11 +998,8 @@ void jbd2_journal_commit_transaction(journal_t *journal)
}
spin_unlock(&journal->j_list_lock);

if (journal->j_commit_callback)
journal->j_commit_callback(journal, commit_transaction);

trace_mark(jbd2_end_commit, "dev %s transaction %d head %d",
journal->j_devname, commit_transaction->t_tid,
journal->j_devname, journal->j_commit_sequence,
journal->j_tail_sequence);
jbd_debug(1, "JBD: commit %d complete, head %d\n",
journal->j_commit_sequence, journal->j_tail_sequence);
Expand Down

0 comments on commit 6c20ec8

Please sign in to comment.