Messages in this thread Patch in this message | | | Subject | [PATCH] fuse: Flush files on wb close -v2 | From | Maxim Patlasov <> | Date | Thu, 10 Oct 2013 17:19:06 +0400 |
| |
From: Pavel Emelyanov <xemul@openvz.org>
Any write request requires a file handle to report to the userspace. Thus when we close a file (and free the fuse_file with this info) we have to flush all the outstanding dirty pages.
filemap_write_and_wait() is enough because every page under fuse writeback is accounted in ff->count. This delays actual close until all fuse wb is completed.
In case of "write cache" turned off, the flush is ensured by fuse_vma_close().
Changed in v2: - updated patch to be applied smoothly on top of "Trust kernel i_mtime only -v2".
Signed-off-by: Maxim Patlasov <MPatlasov@parallels.com> --- fs/fuse/file.c | 6 ++++++ 1 file changed, 6 insertions(+)
diff --git a/fs/fuse/file.c b/fs/fuse/file.c index eabe202..b4d4189 100644 --- a/fs/fuse/file.c +++ b/fs/fuse/file.c @@ -291,6 +291,12 @@ static int fuse_open(struct inode *inode, struct file *file) static int fuse_release(struct inode *inode, struct file *file) { + struct fuse_conn *fc = get_fuse_conn(inode); + + /* see fuse_vma_close() for !writeback_cache case */ + if (fc->writeback_cache) + filemap_write_and_wait(file->f_mapping); + if (test_bit(FUSE_I_MTIME_DIRTY, &get_fuse_inode(inode)->state)) fuse_flush_mtime(file, true);
| |