9P2010.L handshake: Add mount option

Add new mount V9FS mount option to specify protocol version

This patch adds a new mount option to specify protocol version.
With this option it is possible to use "-o version=" switch to
specify 9P protocol version to use. Valid options for version
are:
9p2000
9p2000.u
9p2010.L

Signed-off-by: Sripathi Kodi <sripathik@in.ibm.com>
Signed-off-by: Eric Van Hensbergen <ericvh@gmail.com>
This commit is contained in:
Sripathi Kodi 2010-03-05 18:49:11 +00:00 committed by Eric Van Hensbergen
parent dd6102fbd9
commit 0fb80abd91
2 changed files with 43 additions and 0 deletions

View file

@ -46,6 +46,7 @@ enum {
Opt_msize,
Opt_trans,
Opt_legacy,
Opt_version,
Opt_err,
};
@ -53,9 +54,30 @@ static const match_table_t tokens = {
{Opt_msize, "msize=%u"},
{Opt_legacy, "noextend"},
{Opt_trans, "trans=%s"},
{Opt_version, "version=%s"},
{Opt_err, NULL},
};
/* Interpret mount option for protocol version */
static unsigned char get_protocol_version(const substring_t *name)
{
unsigned char version = -EINVAL;
if (!strncmp("9p2000", name->from, name->to-name->from)) {
version = p9_proto_legacy;
P9_DPRINTK(P9_DEBUG_9P, "Protocol version: Legacy\n");
} else if (!strncmp("9p2000.u", name->from, name->to-name->from)) {
version = p9_proto_2000u;
P9_DPRINTK(P9_DEBUG_9P, "Protocol version: 9P2000.u\n");
} else if (!strncmp("9p2010.L", name->from, name->to-name->from)) {
version = p9_proto_2010L;
P9_DPRINTK(P9_DEBUG_9P, "Protocol version: 9P2010.L\n");
} else {
P9_DPRINTK(P9_DEBUG_ERROR, "Unknown protocol version %s. ",
name->from);
}
return version;
}
static struct p9_req_t *
p9_client_rpc(struct p9_client *c, int8_t type, const char *fmt, ...);
@ -120,6 +142,12 @@ static int parse_opts(char *opts, struct p9_client *clnt)
case Opt_legacy:
clnt->dotu = 0;
break;
case Opt_version:
ret = get_protocol_version(&args[0]);
if (ret == -EINVAL)
goto free_and_return;
clnt->proto_version = ret;
break;
default:
continue;
}