fs: push i_mutex and filemap_write_and_wait down into ->fsync() handlers
[deliverable/linux.git] / fs / hfs / inode.c
index 5e7c3f3096170c97f0c8d648fc139c9867dae445..96a1b625fc74de04cd79ef2ba8fc2a2dba0301a1 100644 (file)
@@ -627,12 +627,18 @@ int hfs_inode_setattr(struct dentry *dentry, struct iattr * attr)
        return 0;
 }
 
-static int hfs_file_fsync(struct file *filp, int datasync)
+static int hfs_file_fsync(struct file *filp, loff_t start, loff_t end,
+                         int datasync)
 {
        struct inode *inode = filp->f_mapping->host;
        struct super_block * sb;
        int ret, err;
 
+       ret = filemap_write_and_wait_range(inode->i_mapping, start, end);
+       if (ret)
+               return ret;
+       mutex_lock(&inode->i_mutex);
+
        /* sync the inode to buffers */
        ret = write_inode_now(inode, 0);
 
@@ -649,6 +655,7 @@ static int hfs_file_fsync(struct file *filp, int datasync)
        err = sync_blockdev(sb->s_bdev);
        if (!ret)
                ret = err;
+       mutex_unlock(&inode->i_mutex);
        return ret;
 }
 
This page took 0.034036 seconds and 5 git commands to generate.