9pnet: refactor struct p9_fcall alloc code
authorSimon Derr <simon.derr@bull.net>
Fri, 21 Jun 2013 13:32:36 +0000 (15:32 +0200)
committerEric Van Hensbergen <ericvh@gmail.com>
Mon, 8 Jul 2013 03:02:27 +0000 (22:02 -0500)
Signed-off-by: Simon Derr <simon.derr@bull.net>
Signed-off-by: Eric Van Hensbergen <ericvh@gmail.com>
net/9p/client.c

index 5828769d1f3d37f31602f330c0eb7be0d73319ea..db5bf2480a336d3bdf7a2b357ca5e3cc6f765fe4 100644 (file)
@@ -204,6 +204,17 @@ free_and_return:
        return ret;
 }
 
+struct p9_fcall *p9_fcall_alloc(int alloc_msize)
+{
+       struct p9_fcall *fc;
+       fc = kmalloc(sizeof(struct p9_fcall) + alloc_msize, GFP_NOFS);
+       if (!fc)
+               return NULL;
+       fc->capacity = alloc_msize;
+       fc->sdata = (char *) fc + sizeof(struct p9_fcall);
+       return fc;
+}
+
 /**
  * p9_tag_alloc - lookup/allocate a request by tag
  * @c: client session to lookup tag within
@@ -256,29 +267,19 @@ p9_tag_alloc(struct p9_client *c, u16 tag, unsigned int max_size)
        col = tag % P9_ROW_MAXTAG;
 
        req = &c->reqs[row][col];
-       if (!req->tc) {
+       if (!req->wq) {
                req->wq = kmalloc(sizeof(wait_queue_head_t), GFP_NOFS);
                if (!req->wq)
                        goto grow_failed;
-
                init_waitqueue_head(req->wq);
-               req->tc = kmalloc(sizeof(struct p9_fcall) + alloc_msize,
-                                 GFP_NOFS);
-               if (!req->tc)
-                       goto grow_failed;
-
-               req->tc->capacity = alloc_msize;
-               req->tc->sdata = (char *) req->tc + sizeof(struct p9_fcall);
        }
-       if (!req->rc) {
-               req->rc = kmalloc(sizeof(struct p9_fcall) + alloc_msize,
-                                 GFP_NOFS);
-               if (!req->rc)
-                       goto grow_failed;
 
-               req->rc->capacity = alloc_msize;
-               req->rc->sdata = (char *) req->rc + sizeof(struct p9_fcall);
-       }
+       if (!req->tc)
+               req->tc = p9_fcall_alloc(alloc_msize);
+       if (!req->rc)
+               req->rc = p9_fcall_alloc(alloc_msize);
+       if (!req->tc || !req->rc)
+               goto grow_failed;
 
        p9pdu_reset(req->tc);
        p9pdu_reset(req->rc);