diff options
| -rw-r--r-- | fs/jbd2/commit.c | 29 |
1 files changed, 16 insertions, 13 deletions
diff --git a/fs/jbd2/commit.c b/fs/jbd2/commit.c index 7c068c189d80..d6aeb1f6cfe0 100644 --- a/fs/jbd2/commit.c +++ b/fs/jbd2/commit.c | |||
| @@ -701,6 +701,16 @@ start_journal_io: | |||
| 701 | } | 701 | } |
| 702 | } | 702 | } |
| 703 | 703 | ||
| 704 | err = journal_finish_inode_data_buffers(journal, commit_transaction); | ||
| 705 | if (err) { | ||
| 706 | printk(KERN_WARNING | ||
| 707 | "JBD2: Detected IO errors while flushing file data " | ||
| 708 | "on %s\n", journal->j_devname); | ||
| 709 | if (journal->j_flags & JBD2_ABORT_ON_SYNCDATA_ERR) | ||
| 710 | jbd2_journal_abort(journal, err); | ||
| 711 | err = 0; | ||
| 712 | } | ||
| 713 | |||
| 704 | /* | 714 | /* |
| 705 | * If the journal is not located on the file system device, | 715 | * If the journal is not located on the file system device, |
| 706 | * then we must flush the file system device before we issue | 716 | * then we must flush the file system device before we issue |
| @@ -719,19 +729,6 @@ start_journal_io: | |||
| 719 | &cbh, crc32_sum); | 729 | &cbh, crc32_sum); |
| 720 | if (err) | 730 | if (err) |
| 721 | __jbd2_journal_abort_hard(journal); | 731 | __jbd2_journal_abort_hard(journal); |
| 722 | if (journal->j_flags & JBD2_BARRIER) | ||
| 723 | blkdev_issue_flush(journal->j_dev, GFP_KERNEL, NULL, | ||
| 724 | BLKDEV_IFL_WAIT); | ||
| 725 | } | ||
| 726 | |||
| 727 | err = journal_finish_inode_data_buffers(journal, commit_transaction); | ||
| 728 | if (err) { | ||
| 729 | printk(KERN_WARNING | ||
| 730 | "JBD2: Detected IO errors while flushing file data " | ||
| 731 | "on %s\n", journal->j_devname); | ||
| 732 | if (journal->j_flags & JBD2_ABORT_ON_SYNCDATA_ERR) | ||
| 733 | jbd2_journal_abort(journal, err); | ||
| 734 | err = 0; | ||
| 735 | } | 732 | } |
| 736 | 733 | ||
| 737 | /* Lo and behold: we have just managed to send a transaction to | 734 | /* Lo and behold: we have just managed to send a transaction to |
| @@ -845,6 +842,12 @@ wait_for_iobuf: | |||
| 845 | } | 842 | } |
| 846 | if (!err && !is_journal_aborted(journal)) | 843 | if (!err && !is_journal_aborted(journal)) |
| 847 | err = journal_wait_on_commit_record(journal, cbh); | 844 | err = journal_wait_on_commit_record(journal, cbh); |
| 845 | if (JBD2_HAS_INCOMPAT_FEATURE(journal, | ||
| 846 | JBD2_FEATURE_INCOMPAT_ASYNC_COMMIT) && | ||
| 847 | journal->j_flags & JBD2_BARRIER) { | ||
| 848 | blkdev_issue_flush(journal->j_dev, GFP_KERNEL, NULL, | ||
| 849 | BLKDEV_IFL_WAIT); | ||
| 850 | } | ||
| 848 | 851 | ||
| 849 | if (err) | 852 | if (err) |
| 850 | jbd2_journal_abort(journal, err); | 853 | jbd2_journal_abort(journal, err); |
