aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTheodore Ts'o <tytso@mit.edu>2016-06-26 18:25:01 -0400
committerTheodore Ts'o <tytso@mit.edu>2016-06-26 18:25:01 -0400
commit78d962510796fdf39ccc5efd23d2eea2eca1ed99 (patch)
tree1f247c26f37e34f79260123286f42a0e9971d70b
parentd08854f5bcf3ea0cabc6fd2fc49c2d97e00c7c88 (diff)
ext4: respect the nobarrier mount option in nojournal mode
Also, if we are going to issue the barrier, we should do this after we write out the parent directories if necessary. Signed-off-by: Theodore Ts'o <tytso@mit.edu> Reviewed-by: Jan Kara <jack@suse.cz>
-rw-r--r--fs/ext4/fsync.c5
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;