--- ./fs/nfs/dir.c.orig 2005-02-07 22:36:02.000000000 +0100 +++ ./fs/nfs/dir.c 2005-02-07 22:44:00.000000000 +0100 @@ -985,6 +985,7 @@ struct inode *inode; int error; int open_flags = 0; + struct rpc_groups fsg = { 1, { dir->i_gid } }; dfprintk(VFS, "NFS: create(%s/%ld, %s\n", dir->i_sb->s_id, dir->i_ino, dentry->d_name.name); @@ -997,7 +998,7 @@ lock_kernel(); nfs_begin_data_update(dir); - inode = NFS_PROTO(dir)->create(dir, dentry, &attr, open_flags); + inode = NFS_PROTO(dir)->create(dir, dentry, &attr, open_flags, &fsg); nfs_end_data_update(dir); if (!IS_ERR(inode)) { d_instantiate(dentry, inode); --- ./fs/nfs/proc.c.orig 2005-02-07 22:41:32.000000000 +0100 +++ ./fs/nfs/proc.c 2005-02-07 22:45:51.000000000 +0100 @@ -231,7 +231,7 @@ static struct inode * nfs_proc_create(struct inode *dir, struct dentry *dentry, struct iattr *sattr, - int flags) + int flags, struct rpc_groups *fsg) { struct nfs_fh fhandle; struct nfs_fattr fattr; @@ -249,7 +249,7 @@ fattr.valid = 0; dprintk("NFS call create %s\n", dentry->d_name.name); - status = nfs2_rpc(NFS_CLIENT(dir), NFSPROC_CREATE, &arg, &res); + status = nfs2_rpc(NFS_CLIENT(dir), NFSPROC_CREATE, &arg, &res, fsg); dprintk("NFS reply create: %d\n", status); if (status == 0) { struct inode *inode; --- ./fs/nfs/nfs3proc.c.orig 2005-02-07 22:41:32.000000000 +0100 +++ ./fs/nfs/nfs3proc.c 2005-02-07 22:46:26.000000000 +0100 @@ -282,7 +282,7 @@ */ static struct inode * nfs3_proc_create(struct inode *dir, struct dentry *dentry, struct iattr *sattr, - int flags) + int flags, struct rpc_groups *fsg) { struct nfs_fh fhandle; struct nfs_fattr fattr; @@ -311,7 +311,7 @@ again: dir_attr.valid = 0; fattr.valid = 0; - status = nfs3_rpc(NFS_CLIENT(dir), NFS3PROC_CREATE, &arg, &res); + status = nfs3_rpc(NFS_CLIENT(dir), NFS3PROC_CREATE, &arg, &res, fsg); nfs_refresh_inode(dir, &dir_attr); /* If the server doesn't support the exclusive creation semantics, --- ./fs/nfs/nfs4proc.c.orig 2005-02-07 22:36:02.000000000 +0100 +++ ./fs/nfs/nfs4proc.c 2005-02-07 22:48:07.000000000 +0100 @@ -1317,13 +1317,13 @@ static struct inode * nfs4_proc_create(struct inode *dir, struct dentry *dentry, struct iattr *sattr, - int flags) + int flags, struct rpc_groups *fsg) { struct inode *inode; struct nfs4_state *state = NULL; struct rpc_cred *cred; - cred = rpcauth_lookupcred(NFS_SERVER(dir)->client->cl_auth, NULL, 0); + cred = rpcauth_lookupcred(NFS_SERVER(dir)->client->cl_auth, fsg, 0); state = nfs4_do_open(dir, dentry, flags, sattr, cred); put_rpccred(cred); if (!IS_ERR(state)) { --- ./include/linux/nfs_xdr.h.orig 2005-02-07 21:50:26.000000000 +0100 +++ ./include/linux/nfs_xdr.h 2005-02-07 22:49:55.000000000 +0100 @@ -682,7 +682,7 @@ int (*write) (struct nfs_write_data *); int (*commit) (struct nfs_write_data *); struct inode * (*create) (struct inode *, struct dentry *, - struct iattr *, int); + struct iattr *, int, struct rpc_groups *); int (*remove) (struct inode *, struct qstr *); int (*unlink_setup) (struct rpc_message *, struct dentry *, struct qstr *);