]> git.proxmox.com Git - mirror_ubuntu-eoan-kernel.git/commitdiff
9P2010.L handshake: Add VFS flags
authorSripathi Kodi <sripathik@in.ibm.com>
Fri, 5 Mar 2010 18:48:00 +0000 (18:48 +0000)
committerEric Van Hensbergen <ericvh@gmail.com>
Fri, 5 Mar 2010 21:04:41 +0000 (15:04 -0600)
Add 9P2000.u and 9P2010.L protocol flags to V9FS VFS

This patch adds 9P2000.u and 9P2010.L protocol flags into V9FS VFS side code
and removes the single flag used for 'extended'.

Signed-off-by: Sripathi Kodi <sripathik@in.ibm.com>
Signed-off-by: Eric Van Hensbergen <ericvh@gmail.com>
fs/9p/fid.c
fs/9p/v9fs.c
fs/9p/v9fs.h
fs/9p/vfs_file.c
fs/9p/vfs_inode.c

index 14d9442045710632418f1060c05878d5113176f8..08b2eb157048b26aafd052daaeba4c8e38239f0a 100644 (file)
@@ -151,7 +151,7 @@ struct p9_fid *v9fs_fid_lookup(struct dentry *dentry)
                        if (access == V9FS_ACCESS_SINGLE)
                                return ERR_PTR(-EPERM);
 
-                       if (v9fs_extended(v9ses))
+                       if (v9fs_proto_dotu(v9ses))
                                uname = NULL;
                        else
                                uname = v9ses->uname;
index 7d6c2139891db0d04673c6078d6a3f85c446dbb6..247f10a934ed610dfe3faff143d8268c3d17e534 100644 (file)
@@ -241,7 +241,7 @@ struct p9_fid *v9fs_session_init(struct v9fs_session_info *v9ses,
        list_add(&v9ses->slist, &v9fs_sessionlist);
        spin_unlock(&v9fs_sessionlist_lock);
 
-       v9ses->flags = V9FS_EXTENDED | V9FS_ACCESS_USER;
+       v9ses->flags = V9FS_PROTO_2000U | V9FS_ACCESS_USER;
        strcpy(v9ses->uname, V9FS_DEFUSER);
        strcpy(v9ses->aname, V9FS_DEFANAME);
        v9ses->uid = ~0;
@@ -263,12 +263,12 @@ struct p9_fid *v9fs_session_init(struct v9fs_session_info *v9ses,
        }
 
        if (!v9ses->clnt->dotu)
-               v9ses->flags &= ~V9FS_EXTENDED;
+               v9ses->flags &= ~V9FS_PROTO_2000U;
 
        v9ses->maxdata = v9ses->clnt->msize - P9_IOHDRSZ;
 
        /* for legacy mode, fall back to V9FS_ACCESS_ANY */
-       if (!v9fs_extended(v9ses) &&
+       if (!v9fs_proto_dotu(v9ses) &&
                ((v9ses->flags&V9FS_ACCESS_MASK) == V9FS_ACCESS_USER)) {
 
                v9ses->flags &= ~V9FS_ACCESS_MASK;
index 019f4ccb70c1a14d302d8d8e945cdbd98455bb43..79000bf624919acf26700d6689ba2d6328108650 100644 (file)
@@ -23,7 +23,8 @@
 
 /**
  * enum p9_session_flags - option flags for each 9P session
- * @V9FS_EXTENDED: whether or not to use 9P2000.u extensions
+ * @V9FS_PROTO_2000U: whether or not to use 9P2000.u extensions
+ * @V9FS_PROTO_2010L: whether or not to use 9P2010.l extensions
  * @V9FS_ACCESS_SINGLE: only the mounting user can access the hierarchy
  * @V9FS_ACCESS_USER: a new attach will be issued for every user (default)
  * @V9FS_ACCESS_ANY: use a single attach for all users
  * Session flags reflect options selected by users at mount time
  */
 enum p9_session_flags {
-       V9FS_EXTENDED           = 0x01,
-       V9FS_ACCESS_SINGLE      = 0x02,
-       V9FS_ACCESS_USER        = 0x04,
-       V9FS_ACCESS_ANY         = 0x06,
-       V9FS_ACCESS_MASK        = 0x06,
+       V9FS_PROTO_2000U        = 0x01,
+       V9FS_PROTO_2010L        = 0x02,
+       V9FS_ACCESS_SINGLE      = 0x04,
+       V9FS_ACCESS_USER        = 0x08,
+       V9FS_ACCESS_ANY         = 0x0C,
+       V9FS_ACCESS_MASK        = 0x0C,
 };
 
 /* possible values of ->cache */
@@ -121,7 +123,12 @@ static inline struct v9fs_session_info *v9fs_inode2v9ses(struct inode *inode)
        return (inode->i_sb->s_fs_info);
 }
 
-static inline int v9fs_extended(struct v9fs_session_info *v9ses)
+static inline int v9fs_proto_dotu(struct v9fs_session_info *v9ses)
 {
-       return v9ses->flags & V9FS_EXTENDED;
+       return v9ses->flags & V9FS_PROTO_2000U;
+}
+
+static inline int v9fs_proto_dotl(struct v9fs_session_info *v9ses)
+{
+       return v9ses->flags & V9FS_PROTO_2010L;
 }
index 74a0461a9ac0dfabd95ca360fa2fa58e32d2e779..36122683fae8df1ff12a21b4454788637f89da1e 100644 (file)
@@ -61,7 +61,7 @@ int v9fs_file_open(struct inode *inode, struct file *file)
 
        P9_DPRINTK(P9_DEBUG_VFS, "inode: %p file: %p \n", inode, file);
        v9ses = v9fs_inode2v9ses(inode);
-       omode = v9fs_uflags2omode(file->f_flags, v9fs_extended(v9ses));
+       omode = v9fs_uflags2omode(file->f_flags, v9fs_proto_dotu(v9ses));
        fid = file->private_data;
        if (!fid) {
                fid = v9fs_fid_clone(file->f_path.dentry);
@@ -77,7 +77,7 @@ int v9fs_file_open(struct inode *inode, struct file *file)
                        i_size_write(inode, 0);
                        inode->i_blocks = 0;
                }
-               if ((file->f_flags & O_APPEND) && (!v9fs_extended(v9ses)))
+               if ((file->f_flags & O_APPEND) && (!v9fs_proto_dotu(v9ses)))
                        generic_file_llseek(file, 0, SEEK_END);
        }
 
index a407fa3388c0c560a7ff754066dfa9606380bef5..d3d3c3c200019117e052dbee65cc50eed75d6075 100644 (file)
@@ -60,7 +60,7 @@ static int unixmode2p9mode(struct v9fs_session_info *v9ses, int mode)
        res = mode & 0777;
        if (S_ISDIR(mode))
                res |= P9_DMDIR;
-       if (v9fs_extended(v9ses)) {
+       if (v9fs_proto_dotu(v9ses)) {
                if (S_ISLNK(mode))
                        res |= P9_DMSYMLINK;
                if (v9ses->nodev == 0) {
@@ -102,21 +102,21 @@ static int p9mode2unixmode(struct v9fs_session_info *v9ses, int mode)
 
        if ((mode & P9_DMDIR) == P9_DMDIR)
                res |= S_IFDIR;
-       else if ((mode & P9_DMSYMLINK) && (v9fs_extended(v9ses)))
+       else if ((mode & P9_DMSYMLINK) && (v9fs_proto_dotu(v9ses)))
                res |= S_IFLNK;
-       else if ((mode & P9_DMSOCKET) && (v9fs_extended(v9ses))
+       else if ((mode & P9_DMSOCKET) && (v9fs_proto_dotu(v9ses))
                 && (v9ses->nodev == 0))
                res |= S_IFSOCK;
-       else if ((mode & P9_DMNAMEDPIPE) && (v9fs_extended(v9ses))
+       else if ((mode & P9_DMNAMEDPIPE) && (v9fs_proto_dotu(v9ses))
                 && (v9ses->nodev == 0))
                res |= S_IFIFO;
-       else if ((mode & P9_DMDEVICE) && (v9fs_extended(v9ses))
+       else if ((mode & P9_DMDEVICE) && (v9fs_proto_dotu(v9ses))
                 && (v9ses->nodev == 0))
                res |= S_IFBLK;
        else
                res |= S_IFREG;
 
-       if (v9fs_extended(v9ses)) {
+       if (v9fs_proto_dotu(v9ses)) {
                if ((mode & P9_DMSETUID) == P9_DMSETUID)
                        res |= S_ISUID;
 
@@ -265,7 +265,7 @@ struct inode *v9fs_get_inode(struct super_block *sb, int mode)
        case S_IFBLK:
        case S_IFCHR:
        case S_IFSOCK:
-               if (!v9fs_extended(v9ses)) {
+               if (!v9fs_proto_dotu(v9ses)) {
                        P9_DPRINTK(P9_DEBUG_ERROR,
                                   "special files without extended mode\n");
                        err = -EINVAL;
@@ -278,7 +278,7 @@ struct inode *v9fs_get_inode(struct super_block *sb, int mode)
                inode->i_fop = &v9fs_file_operations;
                break;
        case S_IFLNK:
-               if (!v9fs_extended(v9ses)) {
+               if (!v9fs_proto_dotu(v9ses)) {
                        P9_DPRINTK(P9_DEBUG_ERROR,
                                   "extended modes used w/o 9P2000.u\n");
                        err = -EINVAL;
@@ -288,7 +288,7 @@ struct inode *v9fs_get_inode(struct super_block *sb, int mode)
                break;
        case S_IFDIR:
                inc_nlink(inode);
-               if (v9fs_extended(v9ses))
+               if (v9fs_proto_dotu(v9ses))
                        inode->i_op = &v9fs_dir_inode_operations_ext;
                else
                        inode->i_op = &v9fs_dir_inode_operations;
@@ -575,7 +575,8 @@ v9fs_vfs_create(struct inode *dir, struct dentry *dentry, int mode,
                flags = O_RDWR;
 
        fid = v9fs_create(v9ses, dir, dentry, NULL, perm,
-                               v9fs_uflags2omode(flags, v9fs_extended(v9ses)));
+                               v9fs_uflags2omode(flags,
+                                               v9fs_proto_dotu(v9ses)));
        if (IS_ERR(fid)) {
                err = PTR_ERR(fid);
                fid = NULL;
@@ -858,7 +859,7 @@ static int v9fs_vfs_setattr(struct dentry *dentry, struct iattr *iattr)
        if (iattr->ia_valid & ATTR_SIZE)
                wstat.length = iattr->ia_size;
 
-       if (v9fs_extended(v9ses)) {
+       if (v9fs_proto_dotu(v9ses)) {
                if (iattr->ia_valid & ATTR_UID)
                        wstat.n_uid = iattr->ia_uid;
 
@@ -897,7 +898,7 @@ v9fs_stat2inode(struct p9_wstat *stat, struct inode *inode,
        inode->i_uid = v9ses->dfltuid;
        inode->i_gid = v9ses->dfltgid;
 
-       if (v9fs_extended(v9ses)) {
+       if (v9fs_proto_dotu(v9ses)) {
                inode->i_uid = stat->n_uid;
                inode->i_gid = stat->n_gid;
        }
@@ -976,7 +977,7 @@ static int v9fs_readlink(struct dentry *dentry, char *buffer, int buflen)
        if (IS_ERR(fid))
                return PTR_ERR(fid);
 
-       if (!v9fs_extended(v9ses))
+       if (!v9fs_proto_dotu(v9ses))
                return -EBADF;
 
        st = p9_client_stat(fid);
@@ -1066,7 +1067,7 @@ static int v9fs_vfs_mkspecial(struct inode *dir, struct dentry *dentry,
        struct p9_fid *fid;
 
        v9ses = v9fs_inode2v9ses(dir);
-       if (!v9fs_extended(v9ses)) {
+       if (!v9fs_proto_dotu(v9ses)) {
                P9_DPRINTK(P9_DEBUG_ERROR, "not extended\n");
                return -EPERM;
        }