Messages in this thread Patch in this message | | | Date | Fri, 03 Aug 2007 19:44:31 +0200 | From | Miklos Szeredi <> | Subject | [patch 05/11] fuse: fix page invalidation |
| |
From: Miklos Szeredi <mszeredi@suse.cz>
Other than truncate, there are two cases, when fuse tries to get rid of cached pages:
a) in open, if KEEP_CACHE flag is not set b) in getattr, if file size changed spontaneously
Until now invalidate_mapping_pages() were used, which didn't get rid of mapped pages. This is wrong, and becomes more wrong as dirty pages are introduced. So instead properly invalidate all pages with invalidate_inode_pages2().
Signed-off-by: Miklos Szeredi <mszeredi@suse.cz> ---
Index: linux/fs/fuse/file.c =================================================================== --- linux.orig/fs/fuse/file.c 2007-08-03 18:36:05.000000000 +0200 +++ linux/fs/fuse/file.c 2007-08-03 18:36:13.000000000 +0200 @@ -87,7 +87,7 @@ void fuse_finish_open(struct inode *inod if (outarg->open_flags & FOPEN_DIRECT_IO) file->f_op = &fuse_direct_io_file_operations; if (!(outarg->open_flags & FOPEN_KEEP_CACHE)) - invalidate_mapping_pages(inode->i_mapping, 0, -1); + invalidate_inode_pages2(inode->i_mapping); ff->fh = outarg->fh; file->private_data = fuse_file_get(ff); } Index: linux/fs/fuse/inode.c =================================================================== --- linux.orig/fs/fuse/inode.c 2007-08-03 18:36:05.000000000 +0200 +++ linux/fs/fuse/inode.c 2007-08-03 18:36:13.000000000 +0200 @@ -143,7 +143,7 @@ void fuse_change_attributes(struct inode if (S_ISREG(inode->i_mode) && oldsize != attr->size) { if (attr->size < oldsize) fuse_truncate(inode->i_mapping, attr->size); - invalidate_mapping_pages(inode->i_mapping, 0, -1); + invalidate_inode_pages2(inode->i_mapping); } } -- - To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
| |