diff options
author | Theodore Ts'o <tytso@mit.edu> | 2016-06-26 18:25:01 -0400 |
---|---|---|
committer | Theodore Ts'o <tytso@mit.edu> | 2016-06-26 18:25:01 -0400 |
commit | 78d962510796fdf39ccc5efd23d2eea2eca1ed99 (patch) | |
tree | 1f247c26f37e34f79260123286f42a0e9971d70b /fs/ext4/fsync.c | |
parent | d08854f5bcf3ea0cabc6fd2fc49c2d97e00c7c88 (diff) | |
download | op-kernel-dev-78d962510796fdf39ccc5efd23d2eea2eca1ed99.zip op-kernel-dev-78d962510796fdf39ccc5efd23d2eea2eca1ed99.tar.gz |
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>
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 8850254..5c43725 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; |