aboutsummaryrefslogtreecommitdiffstats
path: root/kernel/file.c
diff options
context:
space:
mode:
authorMiklos Szeredi <miklos@szeredi.hu>2004-10-10 07:56:12 +0000
committerMiklos Szeredi <miklos@szeredi.hu>2004-10-10 07:56:12 +0000
commitd45baf454dcbd08ef7c5acd6cf69793eb9150954 (patch)
tree6df7f47064f48f5c9c7b0c7f22d5dac9b69aa1c9 /kernel/file.c
parent1eea0325fb83189fe584ee04372574bbb9c99e1e (diff)
downloadlibfuse-d45baf454dcbd08ef7c5acd6cf69793eb9150954.tar.gz
fix
Diffstat (limited to 'kernel/file.c')
-rw-r--r--kernel/file.c11
1 files changed, 4 insertions, 7 deletions
diff --git a/kernel/file.c b/kernel/file.c
index 18c155e..ec2e40c 100644
--- a/kernel/file.c
+++ b/kernel/file.c
@@ -158,17 +158,14 @@ static int fuse_flush(struct file *file)
struct inode *inode = file->f_dentry->d_inode;
struct fuse_conn *fc = INO_FC(inode);
struct fuse_file *ff = file->private_data;
- struct fuse_req *req;
+ struct fuse_req *req = ff->release_req;
struct fuse_flush_in inarg;
int err;
if (fc->no_flush)
return 0;
- req = fuse_get_request(fc);
- if (!req)
- return -EINTR;
-
+ down(&inode->i_sem);
memset(&inarg, 0, sizeof(inarg));
inarg.fh = ff->fh;
req->in.h.opcode = FUSE_FLUSH;
@@ -176,13 +173,13 @@ static int fuse_flush(struct file *file)
req->in.numargs = 1;
req->in.args[0].size = sizeof(inarg);
req->in.args[0].value = &inarg;
- request_send(fc, req);
+ request_send_nonint(fc, req);
err = req->out.h.error;
+ up(&inode->i_sem);
if (err == -ENOSYS) {
fc->no_flush = 1;
err = 0;
}
- fuse_put_request(fc, req);
return err;
}