aboutsummaryrefslogtreecommitdiffstats
path: root/fs/9p/v9fs.c
diff options
context:
space:
mode:
Diffstat (limited to 'fs/9p/v9fs.c')
-rw-r--r--fs/9p/v9fs.c27
1 files changed, 20 insertions, 7 deletions
diff --git a/fs/9p/v9fs.c b/fs/9p/v9fs.c
index d34f2937df66..f5a3200877d6 100644
--- a/fs/9p/v9fs.c
+++ b/fs/9p/v9fs.c
@@ -55,7 +55,7 @@ enum {
55 /* Cache options */ 55 /* Cache options */
56 Opt_cache_loose, Opt_fscache, 56 Opt_cache_loose, Opt_fscache,
57 /* Access options */ 57 /* Access options */
58 Opt_access, 58 Opt_access, Opt_posixacl,
59 /* Error token */ 59 /* Error token */
60 Opt_err 60 Opt_err
61}; 61};
@@ -73,6 +73,7 @@ static const match_table_t tokens = {
73 {Opt_fscache, "fscache"}, 73 {Opt_fscache, "fscache"},
74 {Opt_cachetag, "cachetag=%s"}, 74 {Opt_cachetag, "cachetag=%s"},
75 {Opt_access, "access=%s"}, 75 {Opt_access, "access=%s"},
76 {Opt_posixacl, "posixacl"},
76 {Opt_err, NULL} 77 {Opt_err, NULL}
77}; 78};
78 79
@@ -194,13 +195,7 @@ static int v9fs_parse_options(struct v9fs_session_info *v9ses, char *opts)
194 else if (strcmp(s, "any") == 0) 195 else if (strcmp(s, "any") == 0)
195 v9ses->flags |= V9FS_ACCESS_ANY; 196 v9ses->flags |= V9FS_ACCESS_ANY;
196 else if (strcmp(s, "client") == 0) { 197 else if (strcmp(s, "client") == 0) {
197#ifdef CONFIG_9P_FS_POSIX_ACL
198 v9ses->flags |= V9FS_ACCESS_CLIENT; 198 v9ses->flags |= V9FS_ACCESS_CLIENT;
199#else
200 P9_DPRINTK(P9_DEBUG_ERROR,
201 "Not defined CONFIG_9P_FS_POSIX_ACL. "
202 "Ignoring access=client option\n");
203#endif
204 } else { 199 } else {
205 v9ses->flags |= V9FS_ACCESS_SINGLE; 200 v9ses->flags |= V9FS_ACCESS_SINGLE;
206 v9ses->uid = simple_strtoul(s, &e, 10); 201 v9ses->uid = simple_strtoul(s, &e, 10);
@@ -210,6 +205,16 @@ static int v9fs_parse_options(struct v9fs_session_info *v9ses, char *opts)
210 kfree(s); 205 kfree(s);
211 break; 206 break;
212 207
208 case Opt_posixacl:
209#ifdef CONFIG_9P_FS_POSIX_ACL
210 v9ses->flags |= V9FS_POSIX_ACL;
211#else
212 P9_DPRINTK(P9_DEBUG_ERROR,
213 "Not defined CONFIG_9P_FS_POSIX_ACL. "
214 "Ignoring posixacl option\n");
215#endif
216 break;
217
213 default: 218 default:
214 continue; 219 continue;
215 } 220 }
@@ -304,6 +309,14 @@ struct p9_fid *v9fs_session_init(struct v9fs_session_info *v9ses,
304 v9ses->flags |= V9FS_ACCESS_ANY; 309 v9ses->flags |= V9FS_ACCESS_ANY;
305 v9ses->uid = ~0; 310 v9ses->uid = ~0;
306 } 311 }
312 if (!v9fs_proto_dotl(v9ses) ||
313 !((v9ses->flags & V9FS_ACCESS_MASK) == V9FS_ACCESS_CLIENT)) {
314 /*
315 * We support ACL checks on clinet only if the protocol is
316 * 9P2000.L and access is V9FS_ACCESS_CLIENT.
317 */
318 v9ses->flags &= ~V9FS_ACL_MASK;
319 }
307 320
308 fid = p9_client_attach(v9ses->clnt, NULL, v9ses->uname, ~0, 321 fid = p9_client_attach(v9ses->clnt, NULL, v9ses->uname, ~0,
309 v9ses->aname); 322 v9ses->aname);