diff options
author | Miklos Szeredi <miklos@szeredi.hu> | 2004-06-30 11:13:41 +0000 |
---|---|---|
committer | Miklos Szeredi <miklos@szeredi.hu> | 2004-06-30 11:13:41 +0000 |
commit | 556d03d97b0689ee32cc20d35e8715e655745c80 (patch) | |
tree | 7748befd88de39fe247949b17f593fcd39266843 /kernel/file.c | |
parent | 71e9f86fc65f242b18539c196d6e6ff52de5f8c7 (diff) | |
download | libfuse-556d03d97b0689ee32cc20d35e8715e655745c80.tar.gz |
add inode locking for open/release
Diffstat (limited to 'kernel/file.c')
-rw-r--r-- | kernel/file.c | 7 |
1 files changed, 6 insertions, 1 deletions
diff --git a/kernel/file.c b/kernel/file.c index e845d86..9a7da73 100644 --- a/kernel/file.c +++ b/kernel/file.c @@ -62,7 +62,9 @@ static int fuse_open(struct inode *inode, struct file *file) req->in.numargs = 1; req->in.args[0].size = sizeof(inarg); req->in.args[0].value = &inarg; + down(&inode->i_sem); request_send(fc, req); + up(&inode->i_sem); err = req->out.h.error; if (!err && !(fc->flags & FUSE_KERNEL_CACHE)) { #ifdef KERNEL_2_6 @@ -95,7 +97,10 @@ static int fuse_release(struct inode *inode, struct file *file) req->in.numargs = 1; req->in.args[0].size = sizeof(struct fuse_open_in); req->in.args[0].value = inarg; - request_send_noreply(fc, req); + down(&inode->i_sem); + request_send(fc, req); + up(&inode->i_sem); + fuse_put_request(fc, req); /* Return value is ignored by VFS */ return 0; |