[patch 05/11] fuse: fix page invalidation

From: Miklos Szeredi
Date: Fri Aug 03 2007 - 13:52:18 EST


From: Miklos Szeredi <mszeredi@xxxxxxx>

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@xxxxxxx>
---

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@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/