diff options
Diffstat (limited to 'fs/jbd2/commit.c')
| -rw-r--r-- | fs/jbd2/commit.c | 9 |
1 files changed, 9 insertions, 0 deletions
diff --git a/fs/jbd2/commit.c b/fs/jbd2/commit.c index ebc667bc54a8..c8a1bace685a 100644 --- a/fs/jbd2/commit.c +++ b/fs/jbd2/commit.c | |||
| @@ -509,6 +509,10 @@ void jbd2_journal_commit_transaction(journal_t *journal) | |||
| 509 | if (is_journal_aborted(journal)) { | 509 | if (is_journal_aborted(journal)) { |
| 510 | clear_buffer_jbddirty(jh2bh(jh)); | 510 | clear_buffer_jbddirty(jh2bh(jh)); |
| 511 | JBUFFER_TRACE(jh, "journal is aborting: refile"); | 511 | JBUFFER_TRACE(jh, "journal is aborting: refile"); |
| 512 | jbd2_buffer_abort_trigger(jh, | ||
| 513 | jh->b_frozen_data ? | ||
| 514 | jh->b_frozen_triggers : | ||
| 515 | jh->b_triggers); | ||
| 512 | jbd2_journal_refile_buffer(journal, jh); | 516 | jbd2_journal_refile_buffer(journal, jh); |
| 513 | /* If that was the last one, we need to clean up | 517 | /* If that was the last one, we need to clean up |
| 514 | * any descriptor buffers which may have been | 518 | * any descriptor buffers which may have been |
| @@ -844,6 +848,9 @@ restart_loop: | |||
| 844 | * data. | 848 | * data. |
| 845 | * | 849 | * |
| 846 | * Otherwise, we can just throw away the frozen data now. | 850 | * Otherwise, we can just throw away the frozen data now. |
| 851 | * | ||
| 852 | * We also know that the frozen data has already fired | ||
| 853 | * its triggers if they exist, so we can clear that too. | ||
| 847 | */ | 854 | */ |
| 848 | if (jh->b_committed_data) { | 855 | if (jh->b_committed_data) { |
| 849 | jbd2_free(jh->b_committed_data, bh->b_size); | 856 | jbd2_free(jh->b_committed_data, bh->b_size); |
| @@ -851,10 +858,12 @@ restart_loop: | |||
| 851 | if (jh->b_frozen_data) { | 858 | if (jh->b_frozen_data) { |
| 852 | jh->b_committed_data = jh->b_frozen_data; | 859 | jh->b_committed_data = jh->b_frozen_data; |
| 853 | jh->b_frozen_data = NULL; | 860 | jh->b_frozen_data = NULL; |
| 861 | jh->b_frozen_triggers = NULL; | ||
| 854 | } | 862 | } |
| 855 | } else if (jh->b_frozen_data) { | 863 | } else if (jh->b_frozen_data) { |
| 856 | jbd2_free(jh->b_frozen_data, bh->b_size); | 864 | jbd2_free(jh->b_frozen_data, bh->b_size); |
| 857 | jh->b_frozen_data = NULL; | 865 | jh->b_frozen_data = NULL; |
| 866 | jh->b_frozen_triggers = NULL; | ||
| 858 | } | 867 | } |
| 859 | 868 | ||
| 860 | spin_lock(&journal->j_list_lock); | 869 | spin_lock(&journal->j_list_lock); |
