diff options
author | Miklos Szeredi <miklos@szeredi.hu> | 2004-06-22 18:46:02 +0000 |
---|---|---|
committer | Miklos Szeredi <miklos@szeredi.hu> | 2004-06-22 18:46:02 +0000 |
commit | d3dd2d5466a520f7ca866b478faecd1afd3de1f5 (patch) | |
tree | 4b26642d6057813ce5d3a18b37db1022207a91b6 /kernel/dev.c | |
parent | 2778f6cf5d27e40337f163f476fac8f0ffec1130 (diff) | |
download | libfuse-d3dd2d5466a520f7ca866b478faecd1afd3de1f5.tar.gz |
request allocation improvements
Diffstat (limited to 'kernel/dev.c')
-rw-r--r-- | kernel/dev.c | 21 |
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 */ |