diff -NurpP --minimal linux-2.6.32.43-vs2.3.0.36.29.7/fs/nfs/inode.c linux-2.6.32.43-vs2.3.0.36.29.7.1/fs/nfs/inode.c --- linux-2.6.32.43-vs2.3.0.36.29.7/fs/nfs/inode.c 2011-06-10 13:03:02.000000000 +0200 +++ linux-2.6.32.43-vs2.3.0.36.29.7.1/fs/nfs/inode.c 2011-09-27 18:52:47.000000000 +0200 @@ -369,16 +369,24 @@ nfs_fhget(struct super_block *sb, struct nfsi->cache_validity |= NFS_INO_INVALID_ATTR; if (fattr->valid & NFS_ATTR_FATTR_OWNER) uid = fattr->uid; - else if (nfs_server_capable(inode, NFS_CAP_OWNER)) - nfsi->cache_validity |= NFS_INO_INVALID_ATTR - | NFS_INO_INVALID_ACCESS - | NFS_INO_INVALID_ACL; + else { + uid = TAGINO_UID(DX_TAG(inode), + inode->i_uid, inode->i_tag); + if (nfs_server_capable(inode, NFS_CAP_OWNER)) + nfsi->cache_validity |= NFS_INO_INVALID_ATTR + | NFS_INO_INVALID_ACCESS + | NFS_INO_INVALID_ACL; + } if (fattr->valid & NFS_ATTR_FATTR_GROUP) gid = fattr->gid; - else if (nfs_server_capable(inode, NFS_CAP_OWNER_GROUP)) - nfsi->cache_validity |= NFS_INO_INVALID_ATTR - | NFS_INO_INVALID_ACCESS - | NFS_INO_INVALID_ACL; + else { + gid = TAGINO_GID(DX_TAG(inode), + inode->i_gid, inode->i_tag); + if (nfs_server_capable(inode, NFS_CAP_OWNER_GROUP)) + nfsi->cache_validity |= NFS_INO_INVALID_ATTR + | NFS_INO_INVALID_ACCESS + | NFS_INO_INVALID_ACL; + } if (fattr->valid & NFS_ATTR_FATTR_BLOCKS_USED) inode->i_blocks = fattr->du.nfs2.blocks; if (fattr->valid & NFS_ATTR_FATTR_SPACE_USED) {