diff -NurpP --minimal linux-3.9.4-vs2.3.6.2/fs/btrfs/inode.c linux-3.9.4-vs2.3.6.3/fs/btrfs/inode.c --- linux-3.9.4-vs2.3.6.2/fs/btrfs/inode.c 2013-05-31 20:42:33.000000000 +0000 +++ linux-3.9.4-vs2.3.6.3/fs/btrfs/inode.c 2013-06-03 19:37:03.000000000 +0000 @@ -3313,8 +3313,9 @@ static void btrfs_read_locked_inode(stru struct btrfs_key location; int maybe_acls; u32 rdev; - uid_t uid; - gid_t gid; + kuid_t kuid; + kgid_t kgid; + ktag_t ktag; int ret; bool filled = false; @@ -3343,12 +3344,13 @@ static void btrfs_read_locked_inode(stru inode->i_mode = btrfs_inode_mode(leaf, inode_item); set_nlink(inode, btrfs_inode_nlink(leaf, inode_item)); - uid = btrfs_inode_uid(leaf, inode_item); - gid = btrfs_inode_gid(leaf, inode_item); - i_uid_write(inode, INOTAG_UID(DX_TAG(inode), uid, gid)); - i_gid_write(inode, INOTAG_GID(DX_TAG(inode), uid, gid)); - i_tag_write(inode, INOTAG_TAG(DX_TAG(inode), uid, gid, - btrfs_inode_tag(leaf, inode_item))); + kuid = make_kuid(&init_user_ns, btrfs_inode_uid(leaf, inode_item)); + kgid = make_kgid(&init_user_ns, btrfs_inode_gid(leaf, inode_item)); + ktag = make_ktag(&init_user_ns, btrfs_inode_tag(leaf, inode_item)); + + inode->i_uid = INOTAG_KUID(DX_TAG(inode), kuid, kgid); + inode->i_gid = INOTAG_KGID(DX_TAG(inode), kuid, kgid); + inode->i_tag = INOTAG_KTAG(DX_TAG(inode), kuid, kgid, ktag); btrfs_i_size_write(inode, btrfs_inode_size(leaf, inode_item)); tspec = btrfs_inode_atime(inode_item); @@ -3439,10 +3441,10 @@ static void fill_inode_item(struct btrfs struct inode *inode) { struct btrfs_map_token token; - uid_t uid = TAGINO_UID(DX_TAG(inode), - i_uid_read(inode), i_tag_read(inode)); - gid_t gid = TAGINO_GID(DX_TAG(inode), - i_gid_read(inode), i_tag_read(inode)); + uid_t uid = from_kuid(&init_user_ns, + TAGINO_KUID(DX_TAG(inode), inode->i_uid, inode->i_tag)); + gid_t gid = from_kgid(&init_user_ns, + TAGINO_KGID(DX_TAG(inode), inode->i_gid, inode->i_tag)); btrfs_init_map_token(&token); diff -NurpP --minimal linux-3.9.4-vs2.3.6.2/fs/ext2/ialloc.c linux-3.9.4-vs2.3.6.3/fs/ext2/ialloc.c --- linux-3.9.4-vs2.3.6.2/fs/ext2/ialloc.c 2013-06-01 09:31:28.000000000 +0000 +++ linux-3.9.4-vs2.3.6.3/fs/ext2/ialloc.c 2013-06-03 18:58:16.000000000 +0000 @@ -547,8 +547,7 @@ got: inode->i_mode = mode; inode->i_uid = current_fsuid(); inode->i_gid = dir->i_gid; - inode->i_tag = make_ktag(&init_user_ns, - dx_current_fstag(sb)); + i_tag_write(inode, dx_current_fstag(sb)); } else inode_init_owner(inode, dir, mode); diff -NurpP --minimal linux-3.9.4-vs2.3.6.2/fs/ext2/inode.c linux-3.9.4-vs2.3.6.3/fs/ext2/inode.c --- linux-3.9.4-vs2.3.6.2/fs/ext2/inode.c 2013-05-31 14:47:11.000000000 +0000 +++ linux-3.9.4-vs2.3.6.3/fs/ext2/inode.c 2013-06-03 19:42:51.000000000 +0000 @@ -1462,10 +1462,10 @@ static int __ext2_write_inode(struct ino struct ext2_inode_info *ei = EXT2_I(inode); struct super_block *sb = inode->i_sb; ino_t ino = inode->i_ino; - uid_t uid = TAGINO_UID(DX_TAG(inode), - i_uid_read(inode), i_tag_read(inode)); - gid_t gid = TAGINO_GID(DX_TAG(inode), - i_gid_read(inode), i_tag_read(inode)); + uid_t uid = from_kuid(&init_user_ns, + TAGINO_KUID(DX_TAG(inode), inode->i_uid, inode->i_tag)); + gid_t gid = from_kgid(&init_user_ns, + TAGINO_KGID(DX_TAG(inode), inode->i_gid, inode->i_tag)); struct buffer_head * bh; struct ext2_inode * raw_inode = ext2_get_inode(sb, ino, &bh); int n; diff -NurpP --minimal linux-3.9.4-vs2.3.6.2/fs/ext3/ialloc.c linux-3.9.4-vs2.3.6.3/fs/ext3/ialloc.c --- linux-3.9.4-vs2.3.6.2/fs/ext3/ialloc.c 2013-06-01 09:40:15.000000000 +0000 +++ linux-3.9.4-vs2.3.6.3/fs/ext3/ialloc.c 2013-06-03 19:43:33.000000000 +0000 @@ -470,8 +470,7 @@ got: inode->i_mode = mode; inode->i_uid = current_fsuid(); inode->i_gid = dir->i_gid; - inode->i_tag = make_ktag(&init_user_ns, - dx_current_fstag(sb)); + i_tag_write(inode, dx_current_fstag(sb)); } else inode_init_owner(inode, dir, mode); diff -NurpP --minimal linux-3.9.4-vs2.3.6.2/fs/ext3/inode.c linux-3.9.4-vs2.3.6.3/fs/ext3/inode.c --- linux-3.9.4-vs2.3.6.2/fs/ext3/inode.c 2013-05-31 14:47:11.000000000 +0000 +++ linux-3.9.4-vs2.3.6.3/fs/ext3/inode.c 2013-06-03 19:44:35.000000000 +0000 @@ -3119,10 +3119,10 @@ again: ext3_get_inode_flags(ei); raw_inode->i_mode = cpu_to_le16(inode->i_mode); - i_uid = TAGINO_UID(DX_TAG(inode), - i_uid_read(inode), i_tag_read(inode)); - i_gid = TAGINO_GID(DX_TAG(inode), - i_gid_read(inode), i_tag_read(inode)); + i_uid = from_kuid(&init_user_ns, + TAGINO_KUID(DX_TAG(inode), inode->i_uid, inode->i_tag)); + i_gid = from_kgid(&init_user_ns, + TAGINO_KGID(DX_TAG(inode), inode->i_gid, inode->i_tag)); if(!(test_opt(inode->i_sb, NO_UID32))) { raw_inode->i_uid_low = cpu_to_le16(low_16_bits(i_uid)); raw_inode->i_gid_low = cpu_to_le16(low_16_bits(i_gid)); diff -NurpP --minimal linux-3.9.4-vs2.3.6.2/fs/ext4/ialloc.c linux-3.9.4-vs2.3.6.3/fs/ext4/ialloc.c --- linux-3.9.4-vs2.3.6.2/fs/ext4/ialloc.c 2013-06-01 09:46:49.000000000 +0000 +++ linux-3.9.4-vs2.3.6.3/fs/ext4/ialloc.c 2013-06-03 19:45:15.000000000 +0000 @@ -860,8 +860,7 @@ got: inode->i_mode = mode; inode->i_uid = current_fsuid(); inode->i_gid = dir->i_gid; - inode->i_tag = make_ktag(&init_user_ns, - dx_current_fstag(sb)); + i_tag_write(inode, dx_current_fstag(sb)); } else inode_init_owner(inode, dir, mode); diff -NurpP --minimal linux-3.9.4-vs2.3.6.2/fs/ext4/inode.c linux-3.9.4-vs2.3.6.3/fs/ext4/inode.c --- linux-3.9.4-vs2.3.6.2/fs/ext4/inode.c 2013-05-31 14:47:11.000000000 +0000 +++ linux-3.9.4-vs2.3.6.3/fs/ext4/inode.c 2013-06-03 19:45:35.000000000 +0000 @@ -4259,10 +4259,10 @@ static int ext4_do_update_inode(handle_t ext4_get_inode_flags(ei); raw_inode->i_mode = cpu_to_le16(inode->i_mode); - i_uid = TAGINO_UID(DX_TAG(inode), - i_uid_read(inode), i_tag_read(inode)); - i_gid = TAGINO_GID(DX_TAG(inode), - i_gid_read(inode), i_tag_read(inode)); + i_uid = from_kuid(&init_user_ns, + TAGINO_KUID(DX_TAG(inode), inode->i_uid, inode->i_tag)); + i_gid = from_kgid(&init_user_ns, + TAGINO_KGID(DX_TAG(inode), inode->i_gid, inode->i_tag)); if (!(test_opt(inode->i_sb, NO_UID32))) { raw_inode->i_uid_low = cpu_to_le16(low_16_bits(i_uid)); raw_inode->i_gid_low = cpu_to_le16(low_16_bits(i_gid)); diff -NurpP --minimal linux-3.9.4-vs2.3.6.2/fs/jfs/jfs_imap.c linux-3.9.4-vs2.3.6.3/fs/jfs/jfs_imap.c --- linux-3.9.4-vs2.3.6.2/fs/jfs/jfs_imap.c 2013-05-31 14:47:11.000000000 +0000 +++ linux-3.9.4-vs2.3.6.3/fs/jfs/jfs_imap.c 2013-06-03 19:53:45.000000000 +0000 @@ -3059,8 +3059,8 @@ static int copy_from_dinode(struct dinod { struct jfs_inode_info *jfs_ip = JFS_IP(ip); struct jfs_sb_info *sbi = JFS_SBI(ip->i_sb); - kuid_t uid; - kgid_t gid; + kuid_t kuid; + kgid_t kgid; jfs_ip->fileset = le32_to_cpu(dip->di_fileset); jfs_ip->mode2 = le32_to_cpu(dip->di_mode); @@ -3081,19 +3081,18 @@ static int copy_from_dinode(struct dinod } set_nlink(ip, le32_to_cpu(dip->di_nlink)); - uid = make_kuid(&init_user_ns, le32_to_cpu(dip->di_uid)); - gid = make_kgid(&init_user_ns, le32_to_cpu(dip->di_gid)); - ip->i_tag = make_ktag(&init_user_ns, - INOTAG_TAG(DX_TAG(ip), uid, gid, 0)); + kuid = make_kuid(&init_user_ns, le32_to_cpu(dip->di_uid)); + kgid = make_kgid(&init_user_ns, le32_to_cpu(dip->di_gid)); + ip->i_tag = INOTAG_KTAG(DX_TAG(ip), kuid, kgid, GLOBAL_ROOT_TAG); - jfs_ip->saved_uid = INOTAG_UID(DX_TAG(ip), uid, gid); + jfs_ip->saved_uid = INOTAG_KUID(DX_TAG(ip), kuid, kgid); if (!uid_valid(sbi->uid)) ip->i_uid = jfs_ip->saved_uid; else { ip->i_uid = sbi->uid; } - jfs_ip->saved_gid = INOTAG_GID(DX_TAG(ip), uid, gid); + jfs_ip->saved_gid = INOTAG_KGID(DX_TAG(ip), kuid, kgid); if (!gid_valid(sbi->gid)) ip->i_gid = jfs_ip->saved_gid; else { @@ -3159,11 +3158,11 @@ static void copy_to_dinode(struct dinode dip->di_nblocks = cpu_to_le64(PBLK2LBLK(ip->i_sb, ip->i_blocks)); dip->di_nlink = cpu_to_le32(ip->i_nlink); dip->di_uid = cpu_to_le32(from_kuid(&init_user_ns, - TAGINO_UID(DX_TAG(ip), + TAGINO_KUID(DX_TAG(ip), !uid_valid(sbi->uid) ? ip->i_uid : jfs_ip->saved_uid, ip->i_tag))); - dip->di_gid = cpu_to_le32(from_kuid(&init_user_ns, - TAGINO_GID(DX_TAG(ip), + dip->di_gid = cpu_to_le32(from_kgid(&init_user_ns, + TAGINO_KGID(DX_TAG(ip), !gid_valid(sbi->gid) ? ip->i_gid : jfs_ip->saved_gid, ip->i_tag))); jfs_get_inode_flags(jfs_ip); diff -NurpP --minimal linux-3.9.4-vs2.3.6.2/fs/nfs/inode.c linux-3.9.4-vs2.3.6.3/fs/nfs/inode.c --- linux-3.9.4-vs2.3.6.2/fs/nfs/inode.c 2013-05-31 20:37:45.000000000 +0000 +++ linux-3.9.4-vs2.3.6.3/fs/nfs/inode.c 2013-06-03 19:32:53.000000000 +0000 @@ -291,8 +291,8 @@ nfs_fhget(struct super_block *sb, struct if (inode->i_state & I_NEW) { struct nfs_inode *nfsi = NFS_I(inode); unsigned long now = jiffies; - uid_t uid; - gid_t gid; + kuid_t kuid; + kgid_t kgid; /* We set i_ino for the few things that still rely on it, * such as stat(2) */ @@ -337,8 +337,8 @@ nfs_fhget(struct super_block *sb, struct inode->i_version = 0; inode->i_size = 0; clear_nlink(inode); - uid = make_kuid(&init_user_ns, -2); - gid = make_kgid(&init_user_ns, -2); + kuid = make_kuid(&init_user_ns, -2); + kgid = make_kgid(&init_user_ns, -2); inode->i_blocks = 0; memset(nfsi->cookieverf, 0, sizeof(nfsi->cookieverf)); nfsi->write_io = 0; @@ -372,11 +372,11 @@ nfs_fhget(struct super_block *sb, struct else if (nfs_server_capable(inode, NFS_CAP_NLINK)) nfsi->cache_validity |= NFS_INO_INVALID_ATTR; if (fattr->valid & NFS_ATTR_FATTR_OWNER) - uid = fattr->uid; + kuid = fattr->uid; else if (nfs_server_capable(inode, NFS_CAP_OWNER)) nfsi->cache_validity |= NFS_INO_INVALID_ATTR; if (fattr->valid & NFS_ATTR_FATTR_GROUP) - gid = fattr->gid; + kgid = fattr->gid; else if (nfs_server_capable(inode, NFS_CAP_OWNER_GROUP)) nfsi->cache_validity |= NFS_INO_INVALID_ATTR; if (fattr->valid & NFS_ATTR_FATTR_BLOCKS_USED) @@ -387,9 +387,9 @@ nfs_fhget(struct super_block *sb, struct */ inode->i_blocks = nfs_calc_block_size(fattr->du.nfs3.used); } - inode->i_uid = INOTAG_UID(DX_TAG(inode), uid, gid); - inode->i_gid = INOTAG_GID(DX_TAG(inode), uid, gid); - inode->i_tag = INOTAG_TAG(DX_TAG(inode), uid, gid, 0); + inode->i_uid = INOTAG_KUID(DX_TAG(inode), kuid, kgid); + inode->i_gid = INOTAG_KGID(DX_TAG(inode), kuid, kgid); + inode->i_tag = INOTAG_KTAG(DX_TAG(inode), kuid, kgid, GLOBAL_ROOT_TAG); /* maybe fattr->xid someday */ nfsi->attrtimeo = NFS_MINATTRTIMEO(inode); @@ -993,9 +993,6 @@ static int nfs_check_inode_attributes(st kuid_t kuid; kgid_t kgid; ktag_t ktag; - uid_t uid; - gid_t gid; - if (nfs_have_delegated_attributes(inode)) return 0; @@ -1020,12 +1017,9 @@ static int nfs_check_inode_attributes(st invalid |= NFS_INO_INVALID_ATTR|NFS_INO_REVAL_PAGECACHE; } - uid = from_kuid(&init_user_ns, fattr->uid); - gid = from_kgid(&init_user_ns, fattr->gid); - - kuid = make_kuid(&init_user_ns, INOTAG_UID(DX_TAG(inode), uid, gid)); - kgid = make_kgid(&init_user_ns, INOTAG_GID(DX_TAG(inode), uid, gid)); - ktag = make_ktag(&init_user_ns, INOTAG_TAG(DX_TAG(inode), uid, gid, 0)); + kuid = INOTAG_KUID(DX_TAG(inode), fattr->uid, fattr->gid); + kgid = INOTAG_KGID(DX_TAG(inode), fattr->uid, fattr->gid); + ktag = INOTAG_KTAG(DX_TAG(inode), fattr->uid, fattr->gid, GLOBAL_ROOT_TAG); /* Have any file permissions changed? */ if ((fattr->valid & NFS_ATTR_FATTR_MODE) && (inode->i_mode & S_IALLUGO) != (fattr->mode & S_IALLUGO)) @@ -1340,9 +1334,9 @@ static int nfs_update_inode(struct inode unsigned long invalid = 0; unsigned long now = jiffies; unsigned long save_cache_validity; - uid_t uid; - gid_t gid; - tag_t tag; + kuid_t kuid; + kgid_t kgid; + ktag_t ktag; dfprintk(VFS, "NFS: %s(%s/%ld fh_crc=0x%08x ct=%d info=0x%x)\n", __func__, inode->i_sb->s_id, inode->i_ino, @@ -1444,9 +1438,9 @@ static int nfs_update_inode(struct inode | NFS_INO_REVAL_PAGECACHE | NFS_INO_REVAL_FORCED); - uid = TAGINO_UID(DX_TAG(inode), inode->i_uid, inode->i_tag); - gid = TAGINO_GID(DX_TAG(inode), inode->i_gid, inode->i_tag); - tag = inode->i_tag; + kuid = TAGINO_KUID(DX_TAG(inode), inode->i_uid, inode->i_tag); + kgid = TAGINO_KGID(DX_TAG(inode), inode->i_gid, inode->i_tag); + ktag = TAGINO_KTAG(DX_TAG(inode), inode->i_tag); if (fattr->valid & NFS_ATTR_FATTR_ATIME) memcpy(&inode->i_atime, &fattr->atime, sizeof(inode->i_atime)); @@ -1489,9 +1483,9 @@ static int nfs_update_inode(struct inode | NFS_INO_INVALID_ACL | NFS_INO_REVAL_FORCED); - inode->i_uid = INOTAG_UID(DX_TAG(inode), uid, gid); - inode->i_gid = INOTAG_GID(DX_TAG(inode), uid, gid); - inode->i_tag = INOTAG_TAG(DX_TAG(inode), uid, gid, tag); + inode->i_uid = INOTAG_KUID(DX_TAG(inode), kuid, kgid); + inode->i_gid = INOTAG_KGID(DX_TAG(inode), kuid, kgid); + inode->i_tag = INOTAG_KTAG(DX_TAG(inode), kuid, kgid, ktag); if (fattr->valid & NFS_ATTR_FATTR_NLINK) { if (inode->i_nlink != fattr->nlink) { diff -NurpP --minimal linux-3.9.4-vs2.3.6.2/fs/nfs/nfs3xdr.c linux-3.9.4-vs2.3.6.3/fs/nfs/nfs3xdr.c --- linux-3.9.4-vs2.3.6.2/fs/nfs/nfs3xdr.c 2013-05-31 15:33:48.000000000 +0000 +++ linux-3.9.4-vs2.3.6.3/fs/nfs/nfs3xdr.c 2013-06-03 19:33:10.000000000 +0000 @@ -595,16 +595,16 @@ static void encode_sattr3(struct xdr_str if (attr->ia_valid & ATTR_UID || (tag && (attr->ia_valid & ATTR_TAG))) { *p++ = xdr_one; - *p++ = cpu_to_be32(TAGINO_UID(tag, - from_kuid(&init_user_ns, attr->ia_uid), attr->ia_tag)); + *p++ = cpu_to_be32(from_kuid(&init_user_ns, + TAGINO_KUID(tag, attr->ia_uid, attr->ia_tag))); } else *p++ = xdr_zero; if (attr->ia_valid & ATTR_GID || (tag && (attr->ia_valid & ATTR_TAG))) { *p++ = xdr_one; - *p++ = cpu_to_be32(TAGINO_GID(tag, - from_kgid(&init_user_ns, attr->ia_gid), attr->ia_tag)); + *p++ = cpu_to_be32(from_kgid(&init_user_ns, + TAGINO_KGID(tag, attr->ia_gid, attr->ia_tag))); } else *p++ = xdr_zero; diff -NurpP --minimal linux-3.9.4-vs2.3.6.2/fs/nfsd/nfs3xdr.c linux-3.9.4-vs2.3.6.3/fs/nfsd/nfs3xdr.c --- linux-3.9.4-vs2.3.6.2/fs/nfsd/nfs3xdr.c 2013-05-31 16:17:38.000000000 +0000 +++ linux-3.9.4-vs2.3.6.3/fs/nfsd/nfs3xdr.c 2013-06-03 19:57:43.000000000 +0000 @@ -99,8 +99,8 @@ static __be32 * decode_sattr3(__be32 *p, struct iattr *iap) { u32 tmp; - uid_t uid = 0; - gid_t gid = 0; + kuid_t kuid = GLOBAL_ROOT_UID; + kgid_t kgid = GLOBAL_ROOT_GID; iap->ia_valid = 0; @@ -109,18 +109,18 @@ decode_sattr3(__be32 *p, struct iattr *i iap->ia_mode = ntohl(*p++); } if (*p++) { - uid = make_kuid(&init_user_ns, ntohl(*p++)); + kuid = make_kuid(&init_user_ns, ntohl(*p++)); if (uid_valid(iap->ia_uid)) iap->ia_valid |= ATTR_UID; } if (*p++) { - gid = make_kgid(&init_user_ns, ntohl(*p++)); + kgid = make_kgid(&init_user_ns, ntohl(*p++)); if (gid_valid(iap->ia_gid)) iap->ia_valid |= ATTR_GID; } - iap->ia_uid = INOTAG_UID(DX_TAG_NFSD, uid, gid); - iap->ia_gid = INOTAG_GID(DX_TAG_NFSD, uid, gid); - iap->ia_tag = INOTAG_TAG(DX_TAG_NFSD, uid, gid, 0); + iap->ia_uid = INOTAG_KUID(DX_TAG_NFSD, kuid, kgid); + iap->ia_gid = INOTAG_KGID(DX_TAG_NFSD, kuid, kgid); + iap->ia_tag = INOTAG_KTAG(DX_TAG_NFSD, kuid, kgid, GLOBAL_ROOT_TAG); if (*p++) { u64 newsize; @@ -177,10 +177,10 @@ encode_fattr3(struct svc_rqst *rqstp, __ *p++ = htonl((u32) stat->mode); *p++ = htonl((u32) stat->nlink); *p++ = htonl((u32) from_kuid(&init_user_ns, - TAGINO_UID(0 /* FIXME: DX_TAG(dentry->d_inode) */, + TAGINO_KUID(0 /* FIXME: DX_TAG(dentry->d_inode) */, stat->uid, stat->tag))); *p++ = htonl((u32) from_kgid(&init_user_ns, - TAGINO_GID(0 /* FIXME: DX_TAG(dentry->d_inode) */, + TAGINO_KGID(0 /* FIXME: DX_TAG(dentry->d_inode) */, stat->gid, stat->tag))); if (S_ISLNK(stat->mode) && stat->size > NFS3_MAXPATHLEN) { p = xdr_encode_hyper(p, (u64) NFS3_MAXPATHLEN); diff -NurpP --minimal linux-3.9.4-vs2.3.6.2/fs/nfsd/nfs4xdr.c linux-3.9.4-vs2.3.6.3/fs/nfsd/nfs4xdr.c --- linux-3.9.4-vs2.3.6.2/fs/nfsd/nfs4xdr.c 2013-05-31 14:47:11.000000000 +0000 +++ linux-3.9.4-vs2.3.6.3/fs/nfsd/nfs4xdr.c 2013-06-03 19:33:44.000000000 +0000 @@ -2351,7 +2351,7 @@ out_acl: } if (bmval1 & FATTR4_WORD1_OWNER) { status = nfsd4_encode_user(rqstp, - TAGINO_UID(DX_TAG(dentry->d_inode), + TAGINO_KUID(DX_TAG(dentry->d_inode), stat.uid, stat.tag), &p, &buflen); if (status == nfserr_resource) goto out_resource; @@ -2360,7 +2360,7 @@ out_acl: } if (bmval1 & FATTR4_WORD1_OWNER_GROUP) { status = nfsd4_encode_group(rqstp, - TAGINO_GID(DX_TAG(dentry->d_inode), + TAGINO_KGID(DX_TAG(dentry->d_inode), stat.gid, stat.tag), &p, &buflen); if (status == nfserr_resource) goto out_resource; diff -NurpP --minimal linux-3.9.4-vs2.3.6.2/fs/nfsd/nfsxdr.c linux-3.9.4-vs2.3.6.3/fs/nfsd/nfsxdr.c --- linux-3.9.4-vs2.3.6.2/fs/nfsd/nfsxdr.c 2013-05-31 16:20:53.000000000 +0000 +++ linux-3.9.4-vs2.3.6.3/fs/nfsd/nfsxdr.c 2013-06-03 19:56:35.000000000 +0000 @@ -90,8 +90,8 @@ static __be32 * decode_sattr(__be32 *p, struct iattr *iap) { u32 tmp, tmp1; - uid_t uid = 0; - gid_t gid = 0; + kuid_t kuid = GLOBAL_ROOT_UID; + kgid_t kgid = GLOBAL_ROOT_GID; iap->ia_valid = 0; @@ -104,18 +104,18 @@ decode_sattr(__be32 *p, struct iattr *ia iap->ia_mode = tmp; } if ((tmp = ntohl(*p++)) != (u32)-1) { - uid = make_kuid(&init_user_ns, tmp); + kuid = make_kuid(&init_user_ns, tmp); if (uid_valid(iap->ia_uid)) iap->ia_valid |= ATTR_UID; } if ((tmp = ntohl(*p++)) != (u32)-1) { - gid = make_kgid(&init_user_ns, tmp); + kgid = make_kgid(&init_user_ns, tmp); if (gid_valid(iap->ia_gid)) iap->ia_valid |= ATTR_GID; } - iap->ia_uid = INOTAG_UID(DX_TAG_NFSD, uid, gid); - iap->ia_gid = INOTAG_GID(DX_TAG_NFSD, uid, gid); - iap->ia_tag = INOTAG_TAG(DX_TAG_NFSD, uid, gid, 0); + iap->ia_uid = INOTAG_KUID(DX_TAG_NFSD, kuid, kgid); + iap->ia_gid = INOTAG_KGID(DX_TAG_NFSD, kuid, kgid); + iap->ia_tag = INOTAG_KTAG(DX_TAG_NFSD, kuid, kgid, GLOBAL_ROOT_TAG); if ((tmp = ntohl(*p++)) != (u32)-1) { iap->ia_valid |= ATTR_SIZE; iap->ia_size = tmp; @@ -161,9 +161,9 @@ encode_fattr(struct svc_rqst *rqstp, __b *p++ = htonl((u32) stat->mode); *p++ = htonl((u32) stat->nlink); *p++ = htonl((u32) from_kuid(&init_user_ns, - TAGINO_UID(DX_TAG(dentry->d_inode), stat->uid, stat->tag))); + TAGINO_KUID(DX_TAG(dentry->d_inode), stat->uid, stat->tag))); *p++ = htonl((u32) from_kgid(&init_user_ns, - TAGINO_GID(DX_TAG(dentry->d_inode), stat->gid, stat->tag))); + TAGINO_KGID(DX_TAG(dentry->d_inode), stat->gid, stat->tag))); if (S_ISLNK(type) && stat->size > NFS_MAXPATHLEN) { *p++ = htonl(NFS_MAXPATHLEN); diff -NurpP --minimal linux-3.9.4-vs2.3.6.2/fs/ocfs2/dlmglue.c linux-3.9.4-vs2.3.6.3/fs/ocfs2/dlmglue.c --- linux-3.9.4-vs2.3.6.2/fs/ocfs2/dlmglue.c 2013-05-31 15:47:29.000000000 +0000 +++ linux-3.9.4-vs2.3.6.3/fs/ocfs2/dlmglue.c 2013-06-03 19:59:20.000000000 +0000 @@ -2047,7 +2047,7 @@ static void __ocfs2_stuff_meta_lvb(struc lvb->lvb_iclusters = cpu_to_be32(oi->ip_clusters); lvb->lvb_iuid = cpu_to_be32(i_uid_read(inode)); lvb->lvb_igid = cpu_to_be32(i_gid_read(inode)); - lvb->lvb_itag = cpu_to_be16(inode->i_tag); + lvb->lvb_itag = cpu_to_be16(i_tag_read(inode)); lvb->lvb_imode = cpu_to_be16(inode->i_mode); lvb->lvb_inlink = cpu_to_be16(inode->i_nlink); lvb->lvb_iatime_packed = diff -NurpP --minimal linux-3.9.4-vs2.3.6.2/fs/ocfs2/namei.c linux-3.9.4-vs2.3.6.3/fs/ocfs2/namei.c --- linux-3.9.4-vs2.3.6.2/fs/ocfs2/namei.c 2013-05-31 15:52:25.000000000 +0000 +++ linux-3.9.4-vs2.3.6.3/fs/ocfs2/namei.c 2013-06-03 20:00:35.000000000 +0000 @@ -476,7 +476,7 @@ static int __ocfs2_mknod_locked(struct i struct ocfs2_dinode *fe = NULL; struct ocfs2_extent_list *fel; u16 feat; - tag_t tag; + ktag_t ktag; *new_fe_bh = NULL; @@ -515,10 +515,12 @@ static int __ocfs2_mknod_locked(struct i fe->i_suballoc_bit = cpu_to_le16(suballoc_bit); fe->i_suballoc_slot = cpu_to_le16(inode_ac->ac_alloc_slot); - tag = dx_current_fstag(osb->sb); - fe->i_uid = cpu_to_le32(TAGINO_UID(DX_TAG(inode), i_uid_read(inode), tag)); - fe->i_gid = cpu_to_le32(TAGINO_GID(DX_TAG(inode), i_gid_read(inode), tag)); - inode->i_tag = tag; /* is this correct? */ + ktag = make_ktag(&init_user_ns, dx_current_fstag(osb->sb)); + fe->i_uid = cpu_to_le32(from_kuid(&init_user_ns, + TAGINO_KUID(DX_TAG(inode), inode->i_uid, ktag))); + fe->i_gid = cpu_to_le32(from_kgid(&init_user_ns, + TAGINO_KGID(DX_TAG(inode), inode->i_gid, ktag))); + inode->i_tag = ktag; /* is this correct? */ fe->i_mode = cpu_to_le16(inode->i_mode); if (S_ISCHR(inode->i_mode) || S_ISBLK(inode->i_mode)) fe->id1.dev1.i_rdev = cpu_to_le64(huge_encode_dev(dev)); diff -NurpP --minimal linux-3.9.4-vs2.3.6.2/include/linux/vserver/debug.h linux-3.9.4-vs2.3.6.3/include/linux/vserver/debug.h --- linux-3.9.4-vs2.3.6.2/include/linux/vserver/debug.h 2013-05-31 14:47:11.000000000 +0000 +++ linux-3.9.4-vs2.3.6.3/include/linux/vserver/debug.h 2013-06-03 18:27:34.000000000 +0000 @@ -124,7 +124,8 @@ void dump_vx_info_inactive(int); #define vxwprintk_task(c, f, x...) \ vxwprintk(c, VX_WARN_TASK f, \ current->comm, current->pid, \ - current->xid, current->nid, current->tag, ##x) + current->xid, current->nid, \ + current->tag, ##x) #define vxwprintk_xid(c, f, x...) \ vxwprintk(c, VX_WARN_XID f, current->xid, x) #define vxwprintk_nid(c, f, x...) \ diff -NurpP --minimal linux-3.9.4-vs2.3.6.2/include/linux/vserver/tag.h linux-3.9.4-vs2.3.6.3/include/linux/vserver/tag.h --- linux-3.9.4-vs2.3.6.2/include/linux/vserver/tag.h 2013-06-01 08:36:17.000000000 +0000 +++ linux-3.9.4-vs2.3.6.3/include/linux/vserver/tag.h 2013-06-03 20:23:02.000000000 +0000 @@ -2,6 +2,7 @@ #define _DX_TAG_H #include +#include #define DX_TAG(in) (IS_TAGGED(in)) @@ -100,11 +101,27 @@ #define TAGINO_TAG(cond, tag) ((cond) ? (tag) : 0) #endif +#define TAGINO_KUID(cond, kuid, ktag) \ + KUIDT_INIT(TAGINO_UID(cond, __kuid_val(kuid), __ktag_val(ktag))) +#define TAGINO_KGID(cond, kgid, ktag) \ + KGIDT_INIT(TAGINO_GID(cond, __kgid_val(kgid), __ktag_val(ktag))) +#define TAGINO_KTAG(cond, ktag) \ + KTAGT_INIT(TAGINO_TAG(cond, __ktag_val(ktag))) + + #define INOTAG_UID(cond, uid, gid) \ ((cond) ? ((uid) & MAX_UID) : (uid)) #define INOTAG_GID(cond, uid, gid) \ ((cond) ? ((gid) & MAX_GID) : (gid)) +#define INOTAG_KUID(cond, kuid, kgid) \ + KUIDT_INIT(INOTAG_UID(cond, __kuid_val(kuid), __kgid_val(kgid))) +#define INOTAG_KGID(cond, kuid, kgid) \ + KGIDT_INIT(INOTAG_GID(cond, __kuid_val(kuid), __kgid_val(kgid))) +#define INOTAG_KTAG(cond, kuid, kgid, ktag) \ + KTAGT_INIT(INOTAG_TAG(cond, \ + __kuid_val(kuid), __kgid_val(kgid), __ktag_val(ktag))) + static inline uid_t dx_map_uid(uid_t uid) { @@ -113,9 +130,6 @@ static inline uid_t dx_map_uid(uid_t uid return (uid & MAX_UID); } -#define dx_map_kuid(n, u) \ - make_kuid(n, dx_map_uid(from_kuid(n, u))) - static inline gid_t dx_map_gid(gid_t gid) { if ((gid > MAX_GID) && (gid != -1)) @@ -123,9 +137,6 @@ static inline gid_t dx_map_gid(gid_t gid return (gid & MAX_GID); } -#define dx_map_kgid(n, u) \ - make_kgid(n, dx_map_gid(from_kgid(n, u))) - struct peer_tag { int32_t xid; int32_t nid; diff -NurpP --minimal linux-3.9.4-vs2.3.6.2/net/sunrpc/auth.c linux-3.9.4-vs2.3.6.3/net/sunrpc/auth.c --- linux-3.9.4-vs2.3.6.2/net/sunrpc/auth.c 2013-05-31 18:01:00.000000000 +0000 +++ linux-3.9.4-vs2.3.6.3/net/sunrpc/auth.c 2013-06-03 20:11:37.000000000 +0000 @@ -481,7 +481,7 @@ rpcauth_lookupcred(struct rpc_auth *auth memset(&acred, 0, sizeof(acred)); acred.uid = cred->fsuid; acred.gid = cred->fsgid; - acred.tag = dx_current_tag(); + acred.tag = make_ktag(&init_user_ns, dx_current_tag()); acred.group_info = get_group_info(((struct cred *)cred)->group_info); ret = auth->au_ops->lookup_cred(auth, &acred, flags); @@ -522,7 +522,7 @@ rpcauth_bind_root_cred(struct rpc_task * struct auth_cred acred = { .uid = GLOBAL_ROOT_UID, .gid = GLOBAL_ROOT_GID, - .tag = dx_current_tag(), + .tag = KTAGT_INIT(dx_current_tag()), }; dprintk("RPC: %5u looking up %s cred\n", diff -NurpP --minimal linux-3.9.4-vs2.3.6.2/net/sunrpc/auth_unix.c linux-3.9.4-vs2.3.6.3/net/sunrpc/auth_unix.c --- linux-3.9.4-vs2.3.6.2/net/sunrpc/auth_unix.c 2013-05-31 18:05:54.000000000 +0000 +++ linux-3.9.4-vs2.3.6.3/net/sunrpc/auth_unix.c 2013-06-03 19:35:29.000000000 +0000 @@ -163,12 +163,10 @@ unx_marshal(struct rpc_task *task, __be3 p = xdr_encode_array(p, clnt->cl_nodename, clnt->cl_nodelen); tag = task->tk_client->cl_tag; - *p++ = htonl((u32) TAGINO_UID(tag, - from_kuid(&init_user_ns, cred->uc_uid), - from_ktag(&init_user_ns, cred->uc_tag))); - *p++ = htonl((u32) TAGINO_GID(tag, - from_kgid(&init_user_ns, cred->uc_gid), - from_ktag(&init_user_ns, cred->uc_tag))); + *p++ = htonl((u32) from_kuid(&init_user_ns, + TAGINO_KUID(tag, cred->uc_uid, cred->uc_tag))); + *p++ = htonl((u32) from_kgid(&init_user_ns, + TAGINO_KGID(tag, cred->uc_gid, cred->uc_tag))); hold = p++; for (i = 0; i < 16 && gid_valid(cred->uc_gids[i]); i++) *p++ = htonl((u32) from_kgid(&init_user_ns, cred->uc_gids[i]));