diff --git a/fs/fuse/file.c b/fs/fuse/file.c index 69de9b860c393..530b1e804a327 100644 --- a/fs/fuse/file.c +++ b/fs/fuse/file.c @@ -308,6 +308,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);