fs/9p: Clean-up get_protocol_version() to use strcmp
authorPrem Karat <prem.karat@linux.vnet.ibm.com>
Fri, 6 May 2011 13:05:32 +0000 (18:35 +0530)
committerEric Van Hensbergen <ericvh@gmail.com>
Sat, 23 Jul 2011 14:32:49 +0000 (09:32 -0500)
Signed-off-by: Prem Karat <prem.karat@linux.vnet.ibm.com>
Signed-off-by: Aneesh Kumar K.V <aneesh.kumar@linux.vnet.ibm.com>
Signed-off-by: Eric Van Hensbergen <ericvh@gmail.com>
include/net/9p/client.h
include/net/9p/transport.h
net/9p/client.c
net/9p/mod.c

index d26d5e98a1737e85e9e2004f30d5fa17f4f007ae..f7a8d036f803730c6eeac29862179fcce981fb56 100644 (file)
@@ -36,9 +36,9 @@
  */
 
 enum p9_proto_versions{
-       p9_proto_legacy = 0,
-       p9_proto_2000u = 1,
-       p9_proto_2000L = 2,
+       p9_proto_legacy,
+       p9_proto_2000u,
+       p9_proto_2000L,
 };
 
 
index d8549fb9c742209369f324db5953fd5904aa36dd..83531ebeee99084746d9679dce3c29e47471e38c 100644 (file)
@@ -67,7 +67,7 @@ struct p9_trans_module {
 
 void v9fs_register_trans(struct p9_trans_module *m);
 void v9fs_unregister_trans(struct p9_trans_module *m);
-struct p9_trans_module *v9fs_get_trans_by_name(const substring_t *name);
+struct p9_trans_module *v9fs_get_trans_by_name(char *s);
 struct p9_trans_module *v9fs_get_default_trans(void);
 void v9fs_put_trans(struct p9_trans_module *m);
 #endif /* NET_9P_TRANSPORT_H */
index 7dd4e78878d6a32319d792c11217f9e73415f5c7..431eaef697c7d98d782e1fb7600b5192458c982b 100644 (file)
@@ -72,23 +72,22 @@ inline int p9_is_proto_dotu(struct p9_client *clnt)
 EXPORT_SYMBOL(p9_is_proto_dotu);
 
 /* Interpret mount option for protocol version */
-static int get_protocol_version(const substring_t *name)
+static int get_protocol_version(char *s)
 {
        int version = -EINVAL;
 
-       if (!strncmp("9p2000", name->from, name->to-name->from)) {
+       if (!strcmp(s, "9p2000")) {
                version = p9_proto_legacy;
                P9_DPRINTK(P9_DEBUG_9P, "Protocol version: Legacy\n");
-       } else if (!strncmp("9p2000.u", name->from, name->to-name->from)) {
+       } else if (!strcmp(s, "9p2000.u")) {
                version = p9_proto_2000u;
                P9_DPRINTK(P9_DEBUG_9P, "Protocol version: 9P2000.u\n");
-       } else if (!strncmp("9p2000.L", name->from, name->to-name->from)) {
+       } else if (!strcmp(s, "9p2000.L")) {
                version = p9_proto_2000L;
                P9_DPRINTK(P9_DEBUG_9P, "Protocol version: 9P2000.L\n");
-       } else {
-               P9_DPRINTK(P9_DEBUG_ERROR, "Unknown protocol version %s. ",
-                                                       name->from);
-       }
+       } else
+               printk(KERN_INFO "9p: Unknown protocol version %s.\n", s);
+
        return version;
 }
 
@@ -106,6 +105,7 @@ static int parse_opts(char *opts, struct p9_client *clnt)
        char *p;
        substring_t args[MAX_OPT_ARGS];
        int option;
+       char *s;
        int ret = 0;
 
        clnt->proto_version = p9_proto_2000u;
@@ -141,22 +141,41 @@ static int parse_opts(char *opts, struct p9_client *clnt)
                        clnt->msize = option;
                        break;
                case Opt_trans:
-                       clnt->trans_mod = v9fs_get_trans_by_name(&args[0]);
-                       if(clnt->trans_mod == NULL) {
+                       s = match_strdup(&args[0]);
+                       if (!s) {
+                               ret = -ENOMEM;
                                P9_DPRINTK(P9_DEBUG_ERROR,
-                                  "Could not find request transport: %s\n",
-                                  (char *) &args[0]);
+                                       "problem allocating copy of trans arg\n");
+                               goto free_and_return;
+                        }
+                       clnt->trans_mod = v9fs_get_trans_by_name(s);
+                       if (clnt->trans_mod == NULL) {
+                               printk(KERN_INFO
+                                       "9p: Could not find "
+                                       "request transport: %s\n", s);
                                ret = -EINVAL;
+                               kfree(s);
                                goto free_and_return;
                        }
+                       kfree(s);
                        break;
                case Opt_legacy:
                        clnt->proto_version = p9_proto_legacy;
                        break;
                case Opt_version:
-                       ret = get_protocol_version(&args[0]);
-                       if (ret == -EINVAL)
+                       s = match_strdup(&args[0]);
+                       if (!s) {
+                               ret = -ENOMEM;
+                               P9_DPRINTK(P9_DEBUG_ERROR,
+                                       "problem allocating copy of version arg\n");
+                               goto free_and_return;
+                       }
+                       ret = get_protocol_version(s);
+                       if (ret == -EINVAL) {
+                               kfree(s);
                                goto free_and_return;
+                       }
+                       kfree(s);
                        clnt->proto_version = ret;
                        break;
                default:
index 72c39827505125b618b7a007b6a1dc23d98b4f4f..2664d1292291344e6a43964334df681d4e49e372 100644 (file)
@@ -80,14 +80,14 @@ EXPORT_SYMBOL(v9fs_unregister_trans);
  * @name: string identifying transport
  *
  */
-struct p9_trans_module *v9fs_get_trans_by_name(const substring_t *name)
+struct p9_trans_module *v9fs_get_trans_by_name(char *s)
 {
        struct p9_trans_module *t, *found = NULL;
 
        spin_lock(&v9fs_trans_lock);
 
        list_for_each_entry(t, &v9fs_trans_list, list)
-               if (strncmp(t->name, name->from, name->to-name->from) == 0 &&
+               if (strcmp(t->name, s) == 0 &&
                    try_module_get(t->owner)) {
                        found = t;
                        break;