-/**
- * p9_lookup_tag - Lookup requests by tag
- * @c: virtio channel to lookup tag within
- * @tag: numeric id for transaction
- *
- * this is a simple array lookup, but will grow the
- * request_slots as necessary to accomodate transaction
- * ids which did not previously have a slot.
- *
- * Bugs: there is currently no upper limit on request slots set
- * here, but that should be constrained by the id accounting.
- */
-
-static struct p9_req_t *p9_lookup_tag(struct virtio_chan *c, u16 tag)
-{
- /* This looks up the original request by tag so we know which
- * buffer to read the data into */
- tag++;
-
- while (tag >= c->max_tag) {
- int old_max = c->max_tag;
- int count;
-
- if (c->max_tag)
- c->max_tag *= 2;
- else
- c->max_tag = P9_INIT_MAXTAG;
-
- c->reqs = krealloc(c->reqs, sizeof(struct p9_req_t)*c->max_tag,
- GFP_ATOMIC);
- if (!c->reqs) {
- printk(KERN_ERR "Couldn't grow tag array\n");
- BUG();
- }
- for (count = old_max; count < c->max_tag; count++) {
- c->reqs[count].status = REQ_STATUS_IDLE;
- c->reqs[count].wq = kmalloc(sizeof(wait_queue_head_t),
- GFP_ATOMIC);
- if (!c->reqs[count].wq) {
- printk(KERN_ERR "Couldn't grow tag array\n");
- BUG();
- }
- init_waitqueue_head(c->reqs[count].wq);
- }
- }
-
- return &c->reqs[tag];
-}
-
-