diff options
author | Miklos Szeredi <miklos@szeredi.hu> | 2004-01-29 11:29:18 +0000 |
---|---|---|
committer | Miklos Szeredi <miklos@szeredi.hu> | 2004-01-29 11:29:18 +0000 |
commit | 72f6a93d1bfdab2a325914e4c95a379d02090970 (patch) | |
tree | 682a852b3cc42edf68a831e418d6a6c960a70657 | |
parent | f4f8b89730a3b94d5118d5ec66438e7dec8e6b3d (diff) | |
download | fuse-72f6a93d1bfdab2a325914e4c95a379d02090970.tar.gz |
fix
-rw-r--r-- | ChangeLog | 4 | ||||
-rw-r--r-- | kernel/dev.c | 24 |
2 files changed, 21 insertions, 7 deletions
@@ -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) |