diff options
Diffstat (limited to 'fs/jbd/commit.c')
-rw-r--r-- | fs/jbd/commit.c | 10 |
1 files changed, 9 insertions, 1 deletions
diff --git a/fs/jbd/commit.c b/fs/jbd/commit.c index ae08c057e751..25719d902c51 100644 --- a/fs/jbd/commit.c +++ b/fs/jbd/commit.c | |||
@@ -482,6 +482,8 @@ void journal_commit_transaction(journal_t *journal) | |||
482 | printk(KERN_WARNING | 482 | printk(KERN_WARNING |
483 | "JBD: Detected IO errors while flushing file data " | 483 | "JBD: Detected IO errors while flushing file data " |
484 | "on %s\n", bdevname(journal->j_fs_dev, b)); | 484 | "on %s\n", bdevname(journal->j_fs_dev, b)); |
485 | if (journal->j_flags & JFS_ABORT_ON_SYNCDATA_ERR) | ||
486 | journal_abort(journal, err); | ||
485 | err = 0; | 487 | err = 0; |
486 | } | 488 | } |
487 | 489 | ||
@@ -518,9 +520,10 @@ void journal_commit_transaction(journal_t *journal) | |||
518 | jh = commit_transaction->t_buffers; | 520 | jh = commit_transaction->t_buffers; |
519 | 521 | ||
520 | /* If we're in abort mode, we just un-journal the buffer and | 522 | /* If we're in abort mode, we just un-journal the buffer and |
521 | release it for background writing. */ | 523 | release it. */ |
522 | 524 | ||
523 | if (is_journal_aborted(journal)) { | 525 | if (is_journal_aborted(journal)) { |
526 | clear_buffer_jbddirty(jh2bh(jh)); | ||
524 | JBUFFER_TRACE(jh, "journal is aborting: refile"); | 527 | JBUFFER_TRACE(jh, "journal is aborting: refile"); |
525 | journal_refile_buffer(journal, jh); | 528 | journal_refile_buffer(journal, jh); |
526 | /* If that was the last one, we need to clean up | 529 | /* If that was the last one, we need to clean up |
@@ -762,6 +765,9 @@ wait_for_iobuf: | |||
762 | /* AKPM: bforget here */ | 765 | /* AKPM: bforget here */ |
763 | } | 766 | } |
764 | 767 | ||
768 | if (err) | ||
769 | journal_abort(journal, err); | ||
770 | |||
765 | jbd_debug(3, "JBD: commit phase 6\n"); | 771 | jbd_debug(3, "JBD: commit phase 6\n"); |
766 | 772 | ||
767 | if (journal_write_commit_record(journal, commit_transaction)) | 773 | if (journal_write_commit_record(journal, commit_transaction)) |
@@ -852,6 +858,8 @@ restart_loop: | |||
852 | if (buffer_jbddirty(bh)) { | 858 | if (buffer_jbddirty(bh)) { |
853 | JBUFFER_TRACE(jh, "add to new checkpointing trans"); | 859 | JBUFFER_TRACE(jh, "add to new checkpointing trans"); |
854 | __journal_insert_checkpoint(jh, commit_transaction); | 860 | __journal_insert_checkpoint(jh, commit_transaction); |
861 | if (is_journal_aborted(journal)) | ||
862 | clear_buffer_jbddirty(bh); | ||
855 | JBUFFER_TRACE(jh, "refile for checkpoint writeback"); | 863 | JBUFFER_TRACE(jh, "refile for checkpoint writeback"); |
856 | __journal_refile_buffer(jh); | 864 | __journal_refile_buffer(jh); |
857 | jbd_unlock_bh_state(bh); | 865 | jbd_unlock_bh_state(bh); |