X-Git-Url: https://git.karo-electronics.de/?a=blobdiff_plain;f=fs%2Fjbd2%2Fcommit.c;h=62804e57a44caf2f893d16cc481f7ac347efe19a;hb=4bdc1b96504f5f562b129afd48ca03d79aeb1fd9;hp=073124a29b8c4cc869aeaf106fef38b23bb5ca10;hpb=40a1984d22294ab202f616e432bb8d3481897675;p=mv-sheeva.git diff --git a/fs/jbd2/commit.c b/fs/jbd2/commit.c index 073124a29b8..62804e57a44 100644 --- a/fs/jbd2/commit.c +++ b/fs/jbd2/commit.c @@ -535,6 +535,10 @@ void jbd2_journal_commit_transaction(journal_t *journal) if (is_journal_aborted(journal)) { clear_buffer_jbddirty(jh2bh(jh)); JBUFFER_TRACE(jh, "journal is aborting: refile"); + jbd2_buffer_abort_trigger(jh, + jh->b_frozen_data ? + jh->b_frozen_triggers : + jh->b_triggers); jbd2_journal_refile_buffer(journal, jh); /* If that was the last one, we need to clean up * any descriptor buffers which may have been @@ -870,6 +874,9 @@ restart_loop: * data. * * Otherwise, we can just throw away the frozen data now. + * + * We also know that the frozen data has already fired + * its triggers if they exist, so we can clear that too. */ if (jh->b_committed_data) { jbd2_free(jh->b_committed_data, bh->b_size); @@ -877,10 +884,12 @@ restart_loop: if (jh->b_frozen_data) { jh->b_committed_data = jh->b_frozen_data; jh->b_frozen_data = NULL; + jh->b_frozen_triggers = NULL; } } else if (jh->b_frozen_data) { jbd2_free(jh->b_frozen_data, bh->b_size); jh->b_frozen_data = NULL; + jh->b_frozen_triggers = NULL; } spin_lock(&journal->j_list_lock);