]> pilppa.org Git - linux-2.6-omap-h63xx.git/blobdiff - net/9p/client.c
9p: consolidate transport structure
[linux-2.6-omap-h63xx.git] / net / 9p / client.c
index 2ffe40cf2f01799634c478443284b80f62c9289c..f1a52a7ed7248d5fc919cd6420f195334386a6a3 100644 (file)
@@ -33,8 +33,8 @@
 #include <linux/uaccess.h>
 #include <net/9p/9p.h>
 #include <linux/parser.h>
-#include <net/9p/transport.h>
 #include <net/9p/client.h>
+#include <net/9p/transport.h>
 
 static struct p9_fid *p9_fid_create(struct p9_client *clnt);
 static void p9_fid_destroy(struct p9_fid *fid);
@@ -52,7 +52,7 @@ enum {
        Opt_err,
 };
 
-static match_table_t tokens = {
+static const match_table_t tokens = {
        {Opt_msize, "msize=%u"},
        {Opt_legacy, "noextend"},
        {Opt_trans, "trans=%s"},
@@ -75,7 +75,6 @@ static int parse_opts(char *opts, struct p9_client *clnt)
        int option;
        int ret = 0;
 
-       clnt->trans_mod = v9fs_default_trans();
        clnt->dotu = 1;
        clnt->msize = 8192;
 
@@ -108,7 +107,7 @@ static int parse_opts(char *opts, struct p9_client *clnt)
                        clnt->msize = option;
                        break;
                case Opt_trans:
-                       clnt->trans_mod = v9fs_match_trans(&args[0]);
+                       clnt->trans_mod = v9fs_get_trans_by_name(&args[0]);
                        break;
                case Opt_legacy:
                        clnt->dotu = 0;
@@ -117,6 +116,10 @@ static int parse_opts(char *opts, struct p9_client *clnt)
                        continue;
                }
        }
+
+       if (!clnt->trans_mod)
+               clnt->trans_mod = v9fs_get_default_trans();
+
        kfree(options);
        return ret;
 }
@@ -133,7 +136,7 @@ int
 p9_client_rpc(struct p9_client *c, struct p9_fcall *tc,
        struct p9_fcall **rc)
 {
-       return c->trans->rpc(c->trans, tc, rc);
+       return c->trans_mod->rpc(c, tc, rc);
 }
 
 struct p9_client *p9_client_create(const char *dev_name, char *options)
@@ -150,6 +153,7 @@ struct p9_client *p9_client_create(const char *dev_name, char *options)
        if (!clnt)
                return ERR_PTR(-ENOMEM);
 
+       clnt->trans_mod = NULL;
        clnt->trans = NULL;
        spin_lock_init(&clnt->lock);
        INIT_LIST_HEAD(&clnt->fidlist);
@@ -175,13 +179,9 @@ struct p9_client *p9_client_create(const char *dev_name, char *options)
                clnt, clnt->trans_mod, clnt->msize, clnt->dotu);
 
 
-       clnt->trans = clnt->trans_mod->create(dev_name, options, clnt->msize,
-                                                               clnt->dotu);
-       if (IS_ERR(clnt->trans)) {
-               err = PTR_ERR(clnt->trans);
-               clnt->trans = NULL;
+       err = clnt->trans_mod->create(clnt, dev_name, options);
+       if (err)
                goto error;
-       }
 
        if ((clnt->msize+P9_IOHDRSZ) > clnt->trans_mod->maxsize)
                clnt->msize = clnt->trans_mod->maxsize-P9_IOHDRSZ;
@@ -229,11 +229,10 @@ void p9_client_destroy(struct p9_client *clnt)
 
        P9_DPRINTK(P9_DEBUG_9P, "clnt %p\n", clnt);
 
-       if (clnt->trans) {
-               clnt->trans->close(clnt->trans);
-               kfree(clnt->trans);
-               clnt->trans = NULL;
-       }
+       if (clnt->trans_mod)
+               clnt->trans_mod->close(clnt);
+
+       v9fs_put_trans(clnt->trans_mod);
 
        list_for_each_entry_safe(fid, fidptr, &clnt->fidlist, flist)
                p9_fid_destroy(fid);
@@ -248,7 +247,7 @@ EXPORT_SYMBOL(p9_client_destroy);
 void p9_client_disconnect(struct p9_client *clnt)
 {
        P9_DPRINTK(P9_DEBUG_9P, "clnt %p\n", clnt);
-       clnt->trans->status = Disconnected;
+       clnt->status = Disconnected;
 }
 EXPORT_SYMBOL(p9_client_disconnect);