aboutsummaryrefslogtreecommitdiffstats
path: root/kernel/file.c
diff options
context:
space:
mode:
authorMiklos Szeredi <miklos@szeredi.hu>2002-12-11 09:50:26 +0000
committerMiklos Szeredi <miklos@szeredi.hu>2002-12-11 09:50:26 +0000
commit9478e86a5487b7f0b5ce4c4d7f4d7a9283562058 (patch)
tree389cbc136a90786b6f9551a6a4aff09bbd1abbae /kernel/file.c
parent40b9a5afdd441ccb51af3cbeecf4502a43ff1192 (diff)
downloadlibfuse-9478e86a5487b7f0b5ce4c4d7f4d7a9283562058.tar.gz
release() changes
Diffstat (limited to 'kernel/file.c')
-rw-r--r--kernel/file.c14
1 files changed, 13 insertions, 1 deletions
diff --git a/kernel/file.c b/kernel/file.c
index 0ba4892..f4688f7 100644
--- a/kernel/file.c
+++ b/kernel/file.c
@@ -44,18 +44,30 @@ static int fuse_release(struct inode *inode, struct file *file)
{
struct fuse_conn *fc = INO_FC(inode);
struct fuse_in *in = NULL;
+ struct fuse_open_in *inarg = NULL;
in = kmalloc(sizeof(struct fuse_in), GFP_NOFS);
if(!in)
return -ENOMEM;
-
memset(in, 0, sizeof(struct fuse_in));
+
+ inarg = kmalloc(sizeof(struct fuse_open_in), GFP_NOFS);
+ if(!inarg)
+ goto out_free;
+ memset(inarg, 0, sizeof(struct fuse_open_in));
+
+ inarg->flags = file->f_flags & ~O_EXCL;
in->h.opcode = FUSE_RELEASE;
in->h.ino = inode->i_ino;
+ in->numargs = 1;
+ in->args[0].size = sizeof(struct fuse_open_in);
+ in->args[0].value = inarg;
if(!request_send_noreply(fc, in))
return 0;
+ out_free:
+ kfree(inarg);
kfree(in);
return 0;
}