diff options
Diffstat (limited to 'fs/ext4/fsync.c')
-rw-r--r-- | fs/ext4/fsync.c | 5 |
1 files changed, 4 insertions, 1 deletions
diff --git a/fs/ext4/fsync.c b/fs/ext4/fsync.c index 8850254136ae..5c4372512ef7 100644 --- a/fs/ext4/fsync.c +++ b/fs/ext4/fsync.c | |||
@@ -106,9 +106,11 @@ int ext4_sync_file(struct file *file, loff_t start, loff_t end, int datasync) | |||
106 | } | 106 | } |
107 | 107 | ||
108 | if (!journal) { | 108 | if (!journal) { |
109 | ret = generic_file_fsync(file, start, end, datasync); | 109 | ret = __generic_file_fsync(file, start, end, datasync); |
110 | if (!ret && !hlist_empty(&inode->i_dentry)) | 110 | if (!ret && !hlist_empty(&inode->i_dentry)) |
111 | ret = ext4_sync_parent(inode); | 111 | ret = ext4_sync_parent(inode); |
112 | if (test_opt(inode->i_sb, BARRIER)) | ||
113 | goto issue_flush; | ||
112 | goto out; | 114 | goto out; |
113 | } | 115 | } |
114 | 116 | ||
@@ -140,6 +142,7 @@ int ext4_sync_file(struct file *file, loff_t start, loff_t end, int datasync) | |||
140 | needs_barrier = true; | 142 | needs_barrier = true; |
141 | ret = jbd2_complete_transaction(journal, commit_tid); | 143 | ret = jbd2_complete_transaction(journal, commit_tid); |
142 | if (needs_barrier) { | 144 | if (needs_barrier) { |
145 | issue_flush: | ||
143 | err = blkdev_issue_flush(inode->i_sb->s_bdev, GFP_KERNEL, NULL); | 146 | err = blkdev_issue_flush(inode->i_sb->s_bdev, GFP_KERNEL, NULL); |
144 | if (!ret) | 147 | if (!ret) |
145 | ret = err; | 148 | ret = err; |