ext4: respect the nobarrier mount option in nojournal mode
authorTheodore Ts'o <tytso@mit.edu>
Sun, 26 Jun 2016 22:25:01 +0000 (18:25 -0400)
committerTheodore Ts'o <tytso@mit.edu>
Sun, 26 Jun 2016 22:25:01 +0000 (18:25 -0400)
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>
fs/ext4/fsync.c

index 8850254136ae31fea8c4398a43a21fcb0d21f9cd..5c4372512ef7139f722f60000e8550d27e2820d3 100644 (file)
@@ -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;