fs: push i_mutex and filemap_write_and_wait down into ->fsync() handlers
[GitHub/mt8127/android_kernel_alcatel_ttab.git] / fs / logfs / file.c
index c2ad7028def4ebf78295a418ab8d49b1bb7ff765..b548c87a86f1dbe6ff3b15b185fa432697ea0096 100644 (file)
@@ -219,11 +219,20 @@ long logfs_ioctl(struct file *file, unsigned int cmd, unsigned long arg)
        }
 }
 
-int logfs_fsync(struct file *file, int datasync)
+int logfs_fsync(struct file *file, loff_t start, loff_t end, int datasync)
 {
        struct super_block *sb = file->f_mapping->host->i_sb;
+       struct inode *inode = file->f_mapping->host;
+       int ret;
+
+       ret = filemap_write_and_wait_range(inode->i_mapping, start, end);
+       if (ret)
+               return ret;
 
+       mutex_lock(&inode->i_mutex);
        logfs_write_anchor(sb);
+       mutex_unlock(&inode->i_mutex);
+
        return 0;
 }