diff options
Diffstat (limited to 'fs/hostfs')
-rw-r--r-- | fs/hostfs/hostfs_kern.c | 15 |
1 files changed, 13 insertions, 2 deletions
diff --git a/fs/hostfs/hostfs_kern.c b/fs/hostfs/hostfs_kern.c index 6e449c599b9d..0d22afdd4611 100644 --- a/fs/hostfs/hostfs_kern.c +++ b/fs/hostfs/hostfs_kern.c | |||
@@ -362,9 +362,20 @@ retry: | |||
362 | return 0; | 362 | return 0; |
363 | } | 363 | } |
364 | 364 | ||
365 | int hostfs_fsync(struct file *file, int datasync) | 365 | int hostfs_fsync(struct file *file, loff_t start, loff_t end, int datasync) |
366 | { | 366 | { |
367 | return fsync_file(HOSTFS_I(file->f_mapping->host)->fd, datasync); | 367 | struct inode *inode = file->f_mapping->host; |
368 | int ret; | ||
369 | |||
370 | ret = filemap_write_and_wait_range(inode->i_mapping, start, end); | ||
371 | if (ret) | ||
372 | return ret; | ||
373 | |||
374 | mutex_lock(&inode->i_mutex); | ||
375 | ret = fsync_file(HOSTFS_I(inode)->fd, datasync); | ||
376 | mutex_unlock(&inode->i_mutex); | ||
377 | |||
378 | return ret; | ||
368 | } | 379 | } |
369 | 380 | ||
370 | static const struct file_operations hostfs_file_fops = { | 381 | static const struct file_operations hostfs_file_fops = { |