diff options
author | Miklos Szeredi <miklos@szeredi.hu> | 2002-12-10 14:54:57 +0000 |
---|---|---|
committer | Miklos Szeredi <miklos@szeredi.hu> | 2002-12-10 14:54:57 +0000 |
commit | 383a9dfa0011cce8b5619a6a3f6b69142f8388b8 (patch) | |
tree | 9a0397ea3c370a9fc7ecb0986fa994bba8ab00a3 /kernel/file.c | |
parent | c8ba2379a8dae3cc7a7fdeb6ee00fb95332212aa (diff) | |
download | libfuse-383a9dfa0011cce8b5619a6a3f6b69142f8388b8.tar.gz |
release() changes
Diffstat (limited to 'kernel/file.c')
-rw-r--r-- | kernel/file.c | 21 |
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; } |