fedora core 6 1.2949 + vserver 2.2.0
[linux-2.6.git] / fs / devpts / inode.c
index 5fa3655..6430107 100644 (file)
 #include <linux/tty.h>
 #include <linux/devpts_fs.h>
 #include <linux/parser.h>
+#include <linux/vs_base.h>
 
 
 static int devpts_permission(struct inode *inode, int mask, struct nameidata *nd)
 {
        int ret = -EACCES;
 
-       if (vx_check(inode->i_xid, VX_IDENT))
+       /* devpts is xid tagged */
+       if (vx_check((xid_t)inode->i_tag, VS_WATCH_P|VS_IDENT))
                ret = generic_permission(inode, mask, NULL);
        return ret;
 }
@@ -105,7 +107,8 @@ static int devpts_remount(struct super_block *sb, int *flags, char *data)
 
 static int devpts_filter(struct dentry *de)
 {
-       return vx_check(de->d_inode->i_xid, VX_IDENT);
+       /* devpts is xid tagged */
+       return vx_check((xid_t)de->d_inode->i_tag, VS_WATCH_P|VS_IDENT);
 }
 
 static int devpts_readdir(struct file * filp, void * dirent, filldir_t filldir)
@@ -143,13 +146,13 @@ devpts_fill_super(struct super_block *s, void *data, int silent)
        inode->i_ino = 1;
        inode->i_mtime = inode->i_atime = inode->i_ctime = CURRENT_TIME;
        inode->i_blocks = 0;
-       inode->i_blksize = 1024;
        inode->i_uid = inode->i_gid = 0;
        inode->i_mode = S_IFDIR | S_IRUGO | S_IXUGO | S_IWUSR;
        inode->i_op = &simple_dir_inode_operations;
        inode->i_fop = &devpts_dir_operations;
        inode->i_nlink = 2;
-       inode->i_xid = vx_current_xid();
+       /* devpts is xid tagged */
+       inode->i_tag = (tag_t)vx_current_xid();
 
        devpts_root = s->s_root = d_alloc_root(inode);
        if (s->s_root)
@@ -161,10 +164,10 @@ fail:
        return -ENOMEM;
 }
 
-static struct super_block *devpts_get_sb(struct file_system_type *fs_type,
-       int flags, const char *dev_name, void *data)
+static int devpts_get_sb(struct file_system_type *fs_type,
+       int flags, const char *dev_name, void *data, struct vfsmount *mnt)
 {
-       return get_sb_single(fs_type, flags, data, devpts_fill_super);
+       return get_sb_single(fs_type, flags, data, devpts_fill_super, mnt);
 }
 
 static struct file_system_type devpts_fs_type = {
@@ -203,14 +206,14 @@ int devpts_pty_new(struct tty_struct *tty)
                return -ENOMEM;
 
        inode->i_ino = number+2;
-       inode->i_blksize = 1024;
        inode->i_uid = config.setuid ? config.uid : current->fsuid;
        inode->i_gid = config.setgid ? config.gid : current->fsgid;
        inode->i_mtime = inode->i_atime = inode->i_ctime = CURRENT_TIME;
        init_special_inode(inode, S_IFCHR|config.mode, device);
-       inode->i_xid = vx_current_xid();
+       /* devpts is xid tagged */
+       inode->i_tag = (tag_t)vx_current_xid();
        inode->i_op = &devpts_file_inode_operations;
-       inode->u.generic_ip = tty;
+       inode->i_private = tty;
 
        dentry = get_node(number);
        if (!IS_ERR(dentry) && !dentry->d_inode)
@@ -229,7 +232,7 @@ struct tty_struct *devpts_get_tty(int number)
        tty = NULL;
        if (!IS_ERR(dentry)) {
                if (dentry->d_inode)
-                       tty = dentry->d_inode->u.generic_ip;
+                       tty = dentry->d_inode->i_private;
                dput(dentry);
        }