--- ./fs/nfs/inode.c.orig 2005-02-05 12:46:35.000000000 +0100 +++ ./fs/nfs/inode.c 2005-02-05 12:54:52.000000000 +0100 @@ -730,6 +730,7 @@ { struct inode *inode = dentry->d_inode; struct nfs_fattr fattr; + struct rpc_groups fsg; int error; if (attr->ia_valid & ATTR_SIZE) { @@ -750,7 +751,12 @@ filemap_fdatawait(inode->i_mapping); nfs_wb_all(inode); } - error = NFS_PROTO(inode)->setattr(dentry, &fattr, attr); + fsg.ngroups = 0; + if (attr->ia_valid & ATTR_GID) { + fsg.ngroups = 1; + fsg.groups[0] = attr->ia_gid; + } + error = NFS_PROTO(inode)->setattr(dentry, &fattr, attr, &fsg); if (error == 0) { nfs_refresh_inode(inode, &fattr); if ((attr->ia_valid & ATTR_MODE) != 0) { --- ./fs/nfs/proc.c.orig 2005-02-05 12:46:35.000000000 +0100 +++ ./fs/nfs/proc.c 2005-02-05 12:46:57.000000000 +0100 @@ -129,7 +129,7 @@ static int nfs_proc_setattr(struct dentry *dentry, struct nfs_fattr *fattr, - struct iattr *sattr) + struct iattr *sattr, struct rpc_groups *fsg) { struct inode *inode = dentry->d_inode; struct nfs_sattrargs arg = { @@ -140,7 +140,7 @@ dprintk("NFS call setattr\n"); fattr->valid = 0; - status = nfs2_rpc(NFS_CLIENT(inode), NFSPROC_SETATTR, &arg, fattr); + status = nfs2_rpc(NFS_CLIENT(inode), NFSPROC_SETATTR, &arg, fattr, fsg); dprintk("NFS reply setattr\n"); return status; } --- ./fs/nfs/nfs3proc.c.orig 2005-02-05 12:46:35.000000000 +0100 +++ ./fs/nfs/nfs3proc.c 2005-02-05 12:46:57.000000000 +0100 @@ -113,7 +113,7 @@ static int nfs3_proc_setattr(struct dentry *dentry, struct nfs_fattr *fattr, - struct iattr *sattr) + struct iattr *sattr, struct rpc_groups *fsg) { struct inode *inode = dentry->d_inode; struct nfs3_sattrargs arg = { @@ -124,7 +124,7 @@ dprintk("NFS call setattr\n"); fattr->valid = 0; - status = nfs3_rpc(NFS_CLIENT(inode), NFS3PROC_SETATTR, &arg, fattr); + status = nfs3_rpc(NFS_CLIENT(inode), NFS3PROC_SETATTR, &arg, fattr, fsg); dprintk("NFS reply setattr\n"); return status; } --- ./fs/nfs/nfs4proc.c.orig 2005-02-05 12:46:35.000000000 +0100 +++ ./fs/nfs/nfs4proc.c 2005-02-05 12:46:57.000000000 +0100 @@ -1008,7 +1008,7 @@ */ static int nfs4_proc_setattr(struct dentry *dentry, struct nfs_fattr *fattr, - struct iattr *sattr) + struct iattr *sattr, struct rpc_groups *fsg) { struct inode * inode = dentry->d_inode; int size_change = sattr->ia_valid & ATTR_SIZE; --- ./include/linux/nfs_xdr.h.orig 2005-02-05 12:46:35.000000000 +0100 +++ ./include/linux/nfs_xdr.h 2005-02-05 12:46:57.000000000 +0100 @@ -672,7 +672,7 @@ int (*getattr) (struct nfs_server *, struct nfs_fh *, struct nfs_fattr *); int (*setattr) (struct dentry *, struct nfs_fattr *, - struct iattr *); + struct iattr *, struct rpc_groups *); int (*lookup) (struct inode *, struct qstr *, struct nfs_fh *, struct nfs_fattr *, struct rpc_groups *); int (*access) (struct inode *, struct nfs_access_entry *);