]> pilppa.org Git - linux-2.6-omap-h63xx.git/blobdiff - net/9p/mux.c
sdhci: use PIO when DMA can't satisfy the request
[linux-2.6-omap-h63xx.git] / net / 9p / mux.c
index acb038810f3995c2b5c4b7e742d91e34c33d83bc..c9f0805048e44c0c1f6f6213aea6483a1c9c5aed 100644 (file)
@@ -31,6 +31,7 @@
 #include <linux/idr.h>
 #include <linux/mutex.h>
 #include <net/9p/9p.h>
+#include <linux/parser.h>
 #include <net/9p/transport.h>
 #include <net/9p/conn.h>
 
@@ -71,7 +72,7 @@ struct p9_conn {
        struct p9_mux_poll_task *poll_task;
        int msize;
        unsigned char *extended;
-       struct p9_transport *trans;
+       struct p9_trans *trans;
        struct p9_idpool *tagpool;
        int err;
        wait_queue_head_t equeue;
@@ -221,8 +222,10 @@ static int p9_mux_poll_start(struct p9_conn *m)
        }
 
        if (i >= ARRAY_SIZE(p9_mux_poll_tasks)) {
-               if (vptlast == NULL)
+               if (vptlast == NULL) {
+                       mutex_unlock(&p9_mux_task_lock);
                        return -ENOMEM;
+               }
 
                P9_DPRINTK(P9_DEBUG_MUX, "put in proc %d\n", i);
                list_add(&m->mux_list, &vptlast->mux_list);
@@ -271,7 +274,7 @@ static void p9_mux_poll_stop(struct p9_conn *m)
  * @msize - maximum message size
  * @extended - pointer to the extended flag
  */
-struct p9_conn *p9_conn_create(struct p9_transport *trans, int msize,
+struct p9_conn *p9_conn_create(struct p9_trans *trans, int msize,
                                    unsigned char *extended)
 {
        int i, n;
@@ -288,9 +291,10 @@ struct p9_conn *p9_conn_create(struct p9_transport *trans, int msize,
        m->extended = extended;
        m->trans = trans;
        m->tagpool = p9_idpool_create();
-       if (!m->tagpool) {
+       if (IS_ERR(m->tagpool)) {
+               mtmp = ERR_PTR(-ENOMEM);
                kfree(m);
-               return ERR_PTR(PTR_ERR(m->tagpool));
+               return mtmp;
        }
 
        m->err = 0;
@@ -308,8 +312,10 @@ struct p9_conn *p9_conn_create(struct p9_transport *trans, int msize,
        memset(&m->poll_waddr, 0, sizeof(m->poll_waddr));
        m->poll_task = NULL;
        n = p9_mux_poll_start(m);
-       if (n)
+       if (n) {
+               kfree(m);
                return ERR_PTR(n);
+       }
 
        n = trans->poll(trans, &m->pt);
        if (n & POLLIN) {