diff options
author | Richard Weinberger <richard@nod.at> | 2013-08-04 13:23:51 -0400 |
---|---|---|
committer | Richard Weinberger <richard@nod.at> | 2013-09-07 04:38:29 -0400 |
commit | 65984ff9d2179a97e5a11aaef1e86fdb276cfad5 (patch) | |
tree | ee545bde7f3924570faa3fdd57b89c59ef13b7f9 /fs/hostfs | |
parent | 6e4664525b1db28f8c4e1130957f70a94c19213e (diff) |
um: hostfs: Fix writeback
We have to implement ->release() and trigger writeback from it.
Otherwise we might lose dirty pages at munmap().
Signed-off-by: Richard Weinberger <richard@nod.at>
Diffstat (limited to 'fs/hostfs')
-rw-r--r-- | fs/hostfs/hostfs_kern.c | 9 |
1 files changed, 8 insertions, 1 deletions
diff --git a/fs/hostfs/hostfs_kern.c b/fs/hostfs/hostfs_kern.c index cddb05217512..25437280a207 100644 --- a/fs/hostfs/hostfs_kern.c +++ b/fs/hostfs/hostfs_kern.c | |||
@@ -361,6 +361,13 @@ retry: | |||
361 | return 0; | 361 | return 0; |
362 | } | 362 | } |
363 | 363 | ||
364 | static int hostfs_file_release(struct inode *inode, struct file *file) | ||
365 | { | ||
366 | filemap_write_and_wait(inode->i_mapping); | ||
367 | |||
368 | return 0; | ||
369 | } | ||
370 | |||
364 | int hostfs_fsync(struct file *file, loff_t start, loff_t end, int datasync) | 371 | int hostfs_fsync(struct file *file, loff_t start, loff_t end, int datasync) |
365 | { | 372 | { |
366 | struct inode *inode = file->f_mapping->host; | 373 | struct inode *inode = file->f_mapping->host; |
@@ -386,7 +393,7 @@ static const struct file_operations hostfs_file_fops = { | |||
386 | .write = do_sync_write, | 393 | .write = do_sync_write, |
387 | .mmap = generic_file_mmap, | 394 | .mmap = generic_file_mmap, |
388 | .open = hostfs_file_open, | 395 | .open = hostfs_file_open, |
389 | .release = NULL, | 396 | .release = hostfs_file_release, |
390 | .fsync = hostfs_fsync, | 397 | .fsync = hostfs_fsync, |
391 | }; | 398 | }; |
392 | 399 | ||