|
@@ -106,9 +106,11 @@ int ext4_sync_file(struct file *file, loff_t start, loff_t end, int datasync)
|
|
|
}
|
|
|
|
|
|
if (!journal) {
|
|
|
- ret = generic_file_fsync(file, start, end, datasync);
|
|
|
+ ret = __generic_file_fsync(file, start, end, datasync);
|
|
|
if (!ret && !hlist_empty(&inode->i_dentry))
|
|
|
ret = ext4_sync_parent(inode);
|
|
|
+ if (test_opt(inode->i_sb, BARRIER))
|
|
|
+ goto issue_flush;
|
|
|
goto out;
|
|
|
}
|
|
|
|
|
@@ -140,6 +142,7 @@ int ext4_sync_file(struct file *file, loff_t start, loff_t end, int datasync)
|
|
|
needs_barrier = true;
|
|
|
ret = jbd2_complete_transaction(journal, commit_tid);
|
|
|
if (needs_barrier) {
|
|
|
+ issue_flush:
|
|
|
err = blkdev_issue_flush(inode->i_sb->s_bdev, GFP_KERNEL, NULL);
|
|
|
if (!ret)
|
|
|
ret = err;
|