ext4: avoid issuing unnecessary barriers
authorTheodore Ts'o <tytso@mit.edu>
Mon, 23 Nov 2009 12:24:57 +0000 (07:24 -0500)
committerGreg Kroah-Hartman <gregkh@suse.de>
Mon, 14 Dec 2009 17:45:02 +0000 (09:45 -0800)
(cherry picked from commit 6b17d902fdd241adfa4ce780df20547b28bf5801)

We don't to issue an I/O barrier on an error or if we force commit
because we are doing data journaling.

Signed-off-by: "Theodore Ts'o" <tytso@mit.edu>
Cc: Jan Kara <jack@suse.cz>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
fs/ext4/fsync.c

index 2b1531266ee25010776dcebe8921103da29d9c3a..a3c25076aef12dbb41f862f586a90a441229080a 100644 (file)
@@ -60,7 +60,7 @@ int ext4_sync_file(struct file *file, struct dentry *dentry, int datasync)
 
        ret = flush_aio_dio_completed_IO(inode);
        if (ret < 0)
-               goto out;
+               return ret;
        /*
         * data=writeback:
         *  The caller's filemap_fdatawrite()/wait will sync the data.
@@ -79,10 +79,8 @@ int ext4_sync_file(struct file *file, struct dentry *dentry, int datasync)
         *  (they were dirtied by commit).  But that's OK - the blocks are
         *  safe in-journal, which is all fsync() needs to ensure.
         */
-       if (ext4_should_journal_data(inode)) {
-               ret = ext4_force_commit(inode->i_sb);
-               goto out;
-       }
+       if (ext4_should_journal_data(inode))
+               return ext4_force_commit(inode->i_sb);
 
        if (!journal)
                ret = sync_mapping_buffers(inode->i_mapping);