summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTheodore Ts'o2016-06-27 00:25:01 +0200
committerTheodore Ts'o2016-06-27 00:25:01 +0200
commit78d962510796fdf39ccc5efd23d2eea2eca1ed99 (patch)
tree1f247c26f37e34f79260123286f42a0e9971d70b
parentext4: optimize ext4_should_retry_alloc() to improve ENOSPC performance (diff)
downloadkernel-qcow2-linux-78d962510796fdf39ccc5efd23d2eea2eca1ed99.tar.gz
kernel-qcow2-linux-78d962510796fdf39ccc5efd23d2eea2eca1ed99.tar.xz
kernel-qcow2-linux-78d962510796fdf39ccc5efd23d2eea2eca1ed99.zip
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)
}
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;