X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=fs%2Fdevpts%2Finode.c;h=64301076ebaa2e31b34f95a3758153bf752c0857;hb=97bf2856c6014879bd04983a3e9dfcdac1e7fe85;hp=5fa3655975153cf482e930efccbdea6a230ca808;hpb=43bc926fffd92024b46cafaf7350d669ba9ca884;p=linux-2.6.git diff --git a/fs/devpts/inode.c b/fs/devpts/inode.c index 5fa365597..64301076e 100644 --- a/fs/devpts/inode.c +++ b/fs/devpts/inode.c @@ -19,13 +19,15 @@ #include #include #include +#include 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); }