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>
This commit is contained in:
parent
a2dd43bb0d
commit
4d63055fa9
4 changed files with 39 additions and 20 deletions
|
@ -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,
|
||||
};
|
||||
|
||||
|
||||
|
|
|
@ -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 */
|
||||
|
|
|
@ -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:
|
||||
|
|
|
@ -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…
Reference in a new issue