diff options
author | Sripathi Kodi <sripathik@in.ibm.com> | 2010-03-05 13:49:11 -0500 |
---|---|---|
committer | Eric Van Hensbergen <ericvh@gmail.com> | 2010-03-05 16:04:42 -0500 |
commit | 0fb80abd911a7cb1e6548b5279568dc1e8949702 (patch) | |
tree | 0c179f49f2f0d0bf2c979ee1b1f1cfd864122029 /net/9p/client.c | |
parent | dd6102fbd917889384d89bc427e98e85e8fda000 (diff) |
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>
Diffstat (limited to 'net/9p/client.c')
-rw-r--r-- | net/9p/client.c | 28 |
1 files changed, 28 insertions, 0 deletions
diff --git a/net/9p/client.c b/net/9p/client.c index 09d4f1e2e4a8..3b5f3c94a6eb 100644 --- a/net/9p/client.c +++ b/net/9p/client.c | |||
@@ -46,6 +46,7 @@ enum { | |||
46 | Opt_msize, | 46 | Opt_msize, |
47 | Opt_trans, | 47 | Opt_trans, |
48 | Opt_legacy, | 48 | Opt_legacy, |
49 | Opt_version, | ||
49 | Opt_err, | 50 | Opt_err, |
50 | }; | 51 | }; |
51 | 52 | ||
@@ -53,9 +54,30 @@ static const match_table_t tokens = { | |||
53 | {Opt_msize, "msize=%u"}, | 54 | {Opt_msize, "msize=%u"}, |
54 | {Opt_legacy, "noextend"}, | 55 | {Opt_legacy, "noextend"}, |
55 | {Opt_trans, "trans=%s"}, | 56 | {Opt_trans, "trans=%s"}, |
57 | {Opt_version, "version=%s"}, | ||
56 | {Opt_err, NULL}, | 58 | {Opt_err, NULL}, |
57 | }; | 59 | }; |
58 | 60 | ||
61 | /* Interpret mount option for protocol version */ | ||
62 | static unsigned char get_protocol_version(const substring_t *name) | ||
63 | { | ||
64 | unsigned char version = -EINVAL; | ||
65 | if (!strncmp("9p2000", name->from, name->to-name->from)) { | ||
66 | version = p9_proto_legacy; | ||
67 | P9_DPRINTK(P9_DEBUG_9P, "Protocol version: Legacy\n"); | ||
68 | } else if (!strncmp("9p2000.u", name->from, name->to-name->from)) { | ||
69 | version = p9_proto_2000u; | ||
70 | P9_DPRINTK(P9_DEBUG_9P, "Protocol version: 9P2000.u\n"); | ||
71 | } else if (!strncmp("9p2010.L", name->from, name->to-name->from)) { | ||
72 | version = p9_proto_2010L; | ||
73 | P9_DPRINTK(P9_DEBUG_9P, "Protocol version: 9P2010.L\n"); | ||
74 | } else { | ||
75 | P9_DPRINTK(P9_DEBUG_ERROR, "Unknown protocol version %s. ", | ||
76 | name->from); | ||
77 | } | ||
78 | return version; | ||
79 | } | ||
80 | |||
59 | static struct p9_req_t * | 81 | static struct p9_req_t * |
60 | p9_client_rpc(struct p9_client *c, int8_t type, const char *fmt, ...); | 82 | p9_client_rpc(struct p9_client *c, int8_t type, const char *fmt, ...); |
61 | 83 | ||
@@ -120,6 +142,12 @@ static int parse_opts(char *opts, struct p9_client *clnt) | |||
120 | case Opt_legacy: | 142 | case Opt_legacy: |
121 | clnt->dotu = 0; | 143 | clnt->dotu = 0; |
122 | break; | 144 | break; |
145 | case Opt_version: | ||
146 | ret = get_protocol_version(&args[0]); | ||
147 | if (ret == -EINVAL) | ||
148 | goto free_and_return; | ||
149 | clnt->proto_version = ret; | ||
150 | break; | ||
123 | default: | 151 | default: |
124 | continue; | 152 | continue; |
125 | } | 153 | } |