summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMiklos Szeredi <miklos@szeredi.hu>2004-01-29 11:29:18 +0000
committerMiklos Szeredi <miklos@szeredi.hu>2004-01-29 11:29:18 +0000
commit72f6a93d1bfdab2a325914e4c95a379d02090970 (patch)
tree682a852b3cc42edf68a831e418d6a6c960a70657
parentf4f8b89730a3b94d5118d5ec66438e7dec8e6b3d (diff)
downloadfuse-72f6a93d1bfdab2a325914e4c95a379d02090970.tar.gz
fix
-rw-r--r--ChangeLog4
-rw-r--r--kernel/dev.c24
2 files changed, 21 insertions, 7 deletions
diff --git a/ChangeLog b/ChangeLog
index cb4b313..7c88803 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,7 @@
+2004-01-29 Miklos Szeredi <mszeredi@inf.bme.hu>
+
+ * Properly check if the inode exists in fuse_invalidate
+
2004-01-27 Miklos Szeredi <mszeredi@inf.bme.hu>
* Added -q option for fusermount
diff --git a/kernel/dev.c b/kernel/dev.c
index 9851327..daa464e 100644
--- a/kernel/dev.c
+++ b/kernel/dev.c
@@ -410,21 +410,31 @@ static inline int copy_out_header(struct fuse_out_header *oh, const char *buf,
return 0;
}
+#ifdef KERNEL_2_6
static int fuse_invalidate(struct fuse_conn *fc, struct fuse_user_header *uh)
{
- struct inode *inode = iget(fc->sb, uh->ino);
+ struct inode *inode = ilookup(fc->sb, uh->ino);
if (!inode)
return -ENOENT;
-
-#ifdef KERNEL_2_6
invalidate_inode_pages(inode->i_mapping);
-#else
- invalidate_inode_pages(inode);
-#endif
-
iput(inode);
return 0;
}
+#else
+static int fuse_invalidate(struct fuse_conn *fc, struct fuse_user_header *uh)
+{
+ struct inode *inode = iget(fc->sb, uh->ino);
+ int err = -ENOENT;
+ if(inode) {
+ if(inode->u.generic_ip) {
+ invalidate_inode_pages(inode);
+ err = 0;
+ }
+ iput(inode);
+ }
+ return err;
+}
+#endif
static int fuse_user_request(struct fuse_conn *fc, const char *buf,
size_t nbytes)