Loading include/net/9p/client.h +3 −3 Original line number Diff line number Diff line Loading @@ -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, }; Loading include/net/9p/transport.h +1 −1 Original line number Diff line number Diff line Loading @@ -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 */ net/9p/client.c +33 −14 Original line number Diff line number Diff line Loading @@ -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; } Loading @@ -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; Loading Loading @@ -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: Loading net/9p/mod.c +2 −2 Original line number Diff line number Diff line Loading @@ -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; Loading Loading
include/net/9p/client.h +3 −3 Original line number Diff line number Diff line Loading @@ -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, }; Loading
include/net/9p/transport.h +1 −1 Original line number Diff line number Diff line Loading @@ -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 */
net/9p/client.c +33 −14 Original line number Diff line number Diff line Loading @@ -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; } Loading @@ -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; Loading Loading @@ -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: Loading
net/9p/mod.c +2 −2 Original line number Diff line number Diff line Loading @@ -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; Loading