فهرست منبع

fs/9p: Clean-up get_protocol_version() to use strcmp

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>
Prem Karat 14 سال پیش
والد
کامیت
4d63055fa9
4فایلهای تغییر یافته به همراه39 افزوده شده و 20 حذف شده
  1. 3 3
      include/net/9p/client.h
  2. 1 1
      include/net/9p/transport.h
  3. 33 14
      net/9p/client.c
  4. 2 2
      net/9p/mod.c

+ 3 - 3
include/net/9p/client.h

@@ -36,9 +36,9 @@
  */
  */
 
 
 enum p9_proto_versions{
 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,
 };
 };
 
 
 
 

+ 1 - 1
include/net/9p/transport.h

@@ -67,7 +67,7 @@ struct p9_trans_module {
 
 
 void v9fs_register_trans(struct p9_trans_module *m);
 void v9fs_register_trans(struct p9_trans_module *m);
 void v9fs_unregister_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);
 struct p9_trans_module *v9fs_get_default_trans(void);
 void v9fs_put_trans(struct p9_trans_module *m);
 void v9fs_put_trans(struct p9_trans_module *m);
 #endif /* NET_9P_TRANSPORT_H */
 #endif /* NET_9P_TRANSPORT_H */

+ 33 - 14
net/9p/client.c

@@ -72,23 +72,22 @@ inline int p9_is_proto_dotu(struct p9_client *clnt)
 EXPORT_SYMBOL(p9_is_proto_dotu);
 EXPORT_SYMBOL(p9_is_proto_dotu);
 
 
 /* Interpret mount option for protocol version */
 /* 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;
 	int version = -EINVAL;
 
 
-	if (!strncmp("9p2000", name->from, name->to-name->from)) {
+	if (!strcmp(s, "9p2000")) {
 		version = p9_proto_legacy;
 		version = p9_proto_legacy;
 		P9_DPRINTK(P9_DEBUG_9P, "Protocol version: Legacy\n");
 		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;
 		version = p9_proto_2000u;
 		P9_DPRINTK(P9_DEBUG_9P, "Protocol version: 9P2000.u\n");
 		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;
 		version = p9_proto_2000L;
 		P9_DPRINTK(P9_DEBUG_9P, "Protocol version: 9P2000.L\n");
 		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;
 	return version;
 }
 }
 
 
@@ -106,6 +105,7 @@ static int parse_opts(char *opts, struct p9_client *clnt)
 	char *p;
 	char *p;
 	substring_t args[MAX_OPT_ARGS];
 	substring_t args[MAX_OPT_ARGS];
 	int option;
 	int option;
+	char *s;
 	int ret = 0;
 	int ret = 0;
 
 
 	clnt->proto_version = p9_proto_2000u;
 	clnt->proto_version = p9_proto_2000u;
@@ -141,22 +141,41 @@ static int parse_opts(char *opts, struct p9_client *clnt)
 			clnt->msize = option;
 			clnt->msize = option;
 			break;
 			break;
 		case Opt_trans:
 		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,
 				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;
 				ret = -EINVAL;
+				kfree(s);
 				goto free_and_return;
 				goto free_and_return;
 			}
 			}
+			kfree(s);
 			break;
 			break;
 		case Opt_legacy:
 		case Opt_legacy:
 			clnt->proto_version = p9_proto_legacy;
 			clnt->proto_version = p9_proto_legacy;
 			break;
 			break;
 		case Opt_version:
 		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;
 				goto free_and_return;
+			}
+			kfree(s);
 			clnt->proto_version = ret;
 			clnt->proto_version = ret;
 			break;
 			break;
 		default:
 		default:

+ 2 - 2
net/9p/mod.c

@@ -80,14 +80,14 @@ EXPORT_SYMBOL(v9fs_unregister_trans);
  * @name: string identifying transport
  * @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;
 	struct p9_trans_module *t, *found = NULL;
 
 
 	spin_lock(&v9fs_trans_lock);
 	spin_lock(&v9fs_trans_lock);
 
 
 	list_for_each_entry(t, &v9fs_trans_list, list)
 	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)) {
 		    try_module_get(t->owner)) {
 			found = t;
 			found = t;
 			break;
 			break;