aboutsummaryrefslogtreecommitdiffstats
path: root/kernel/dev.c
diff options
context:
space:
mode:
Diffstat (limited to 'kernel/dev.c')
-rw-r--r--kernel/dev.c21
1 files changed, 9 insertions, 12 deletions
diff --git a/kernel/dev.c b/kernel/dev.c
index 84d4d99..72fdba4 100644
--- a/kernel/dev.c
+++ b/kernel/dev.c
@@ -109,6 +109,7 @@ static struct fuse_req *do_get_request(struct fuse_conn *fc)
memset(req, 0, sizeof(*req));
INIT_LIST_HEAD(&req->list);
init_waitqueue_head(&req->waitq);
+ req->preallocated = 1;
return req;
}
@@ -139,20 +140,16 @@ struct fuse_req *fuse_get_request_nonblock(struct fuse_conn *fc)
return req;
}
-struct fuse_req *fuse_get_request_nonint(struct fuse_conn *fc)
-{
- down(&fc->unused_sem);
-
- return do_get_request(fc);
-}
-
-
void fuse_put_request(struct fuse_conn *fc, struct fuse_req *req)
{
- spin_lock(&fuse_lock);
- list_add(&req->list, &fc->unused_list);
- spin_unlock(&fuse_lock);
- up(&fc->unused_sem);
+ if (!req->preallocated)
+ fuse_request_free(req);
+ else {
+ spin_lock(&fuse_lock);
+ list_add(&req->list, &fc->unused_list);
+ spin_unlock(&fuse_lock);
+ up(&fc->unused_sem);
+ }
}
/* Must be called with fuse_lock held, and unlocks it */