]> git.karo-electronics.de Git - mv-sheeva.git/blobdiff - fs/9p/v9fs.c
Merge tag 'v2.6.37' of git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux-2.6
[mv-sheeva.git] / fs / 9p / v9fs.c
index 38dc0e0675998413dd205d13674412eff054ec4e..2f77cd33ba836d83c00e889294babb1905cc62a8 100644 (file)
@@ -193,7 +193,17 @@ static int v9fs_parse_options(struct v9fs_session_info *v9ses, char *opts)
                                v9ses->flags |= V9FS_ACCESS_USER;
                        else if (strcmp(s, "any") == 0)
                                v9ses->flags |= V9FS_ACCESS_ANY;
-                       else {
+                       else if (strcmp(s, "client") == 0) {
+#ifdef CONFIG_9P_FS_POSIX_ACL
+                               v9ses->flags |= V9FS_ACCESS_CLIENT;
+#else
+                               P9_DPRINTK(P9_DEBUG_ERROR,
+                                       "access=client option not supported\n");
+                               kfree(s);
+                               ret = -EINVAL;
+                               goto free_and_return;
+#endif
+                       } else {
                                v9ses->flags |= V9FS_ACCESS_SINGLE;
                                v9ses->uid = simple_strtoul(s, &e, 10);
                                if (*e != '\0')
@@ -278,6 +288,16 @@ struct p9_fid *v9fs_session_init(struct v9fs_session_info *v9ses,
 
        v9ses->maxdata = v9ses->clnt->msize - P9_IOHDRSZ;
 
+       if (!v9fs_proto_dotl(v9ses) &&
+           ((v9ses->flags & V9FS_ACCESS_MASK) == V9FS_ACCESS_CLIENT)) {
+               /*
+                * We support ACCESS_CLIENT only for dotl.
+                * Fall back to ACCESS_USER
+                */
+               v9ses->flags &= ~V9FS_ACCESS_MASK;
+               v9ses->flags |= V9FS_ACCESS_USER;
+       }
+       /*FIXME !! */
        /* for legacy mode, fall back to V9FS_ACCESS_ANY */
        if (!(v9fs_proto_dotu(v9ses) || v9fs_proto_dotl(v9ses)) &&
                ((v9ses->flags&V9FS_ACCESS_MASK) == V9FS_ACCESS_USER)) {