aboutsummaryrefslogtreecommitdiffstats
path: root/kernel/file.c
diff options
context:
space:
mode:
authorMiklos Szeredi <miklos@szeredi.hu>2002-12-10 14:54:57 +0000
committerMiklos Szeredi <miklos@szeredi.hu>2002-12-10 14:54:57 +0000
commit383a9dfa0011cce8b5619a6a3f6b69142f8388b8 (patch)
tree9a0397ea3c370a9fc7ecb0986fa994bba8ab00a3 /kernel/file.c
parentc8ba2379a8dae3cc7a7fdeb6ee00fb95332212aa (diff)
downloadlibfuse-383a9dfa0011cce8b5619a6a3f6b69142f8388b8.tar.gz
release() changes
Diffstat (limited to 'kernel/file.c')
-rw-r--r--kernel/file.c21
1 files changed, 10 insertions, 11 deletions
diff --git a/kernel/file.c b/kernel/file.c
index 4940117..0ba4892 100644
--- a/kernel/file.c
+++ b/kernel/file.c
@@ -43,22 +43,21 @@ static int fuse_open(struct inode *inode, struct file *file)
static int fuse_release(struct inode *inode, struct file *file)
{
struct fuse_conn *fc = INO_FC(inode);
- struct fuse_in in = FUSE_IN_INIT;
- struct fuse_out out = FUSE_OUT_INIT;
+ struct fuse_in *in = NULL;
- if(!fc->has_release)
- return 0;
+ in = kmalloc(sizeof(struct fuse_in), GFP_NOFS);
+ if(!in)
+ return -ENOMEM;
- in.h.opcode = FUSE_RELEASE;
- in.h.ino = inode->i_ino;
- request_send(fc, &in, &out);
+ memset(in, 0, sizeof(struct fuse_in));
- if(out.h.error == -ENOSYS) {
- fc->has_release = 0;
+ in->h.opcode = FUSE_RELEASE;
+ in->h.ino = inode->i_ino;
+ if(!request_send_noreply(fc, in))
return 0;
- }
- return out.h.error;
+ kfree(in);
+ return 0;
}