--- ./fs/nfs/dir.c.orig 2005-02-02 21:10:03.000000000 +0100 +++ ./fs/nfs/dir.c 2005-02-02 21:10:51.000000000 +0100 @@ -1035,6 +1035,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); @@ -1053,7 +1054,7 @@ */ lock_kernel(); nfs_begin_data_update(dir); - inode = NFS_PROTO(dir)->create(dir, &dentry->d_name, &attr, open_flags); + inode = NFS_PROTO(dir)->create(dir, &dentry->d_name, &attr, open_flags, &fsg); nfs_end_data_update(dir); if (!IS_ERR(inode)) { d_instantiate(dentry, inode); --- ./fs/nfs/proc.c.orig 2005-02-02 21:10:33.000000000 +0100 +++ ./fs/nfs/proc.c 2005-02-02 21:10:51.000000000 +0100 @@ -231,7 +231,7 @@ static struct inode * nfs_proc_create(struct inode *dir, struct qstr *name, 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", 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-02 21:10:33.000000000 +0100 +++ ./fs/nfs/nfs3proc.c 2005-02-02 21:10:51.000000000 +0100 @@ -282,7 +282,7 @@ */ static struct inode * nfs3_proc_create(struct inode *dir, struct qstr *name, 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-02 21:10:03.000000000 +0100 +++ ./fs/nfs/nfs4proc.c 2005-02-02 21:10:51.000000000 +0100 @@ -1328,13 +1328,13 @@ static struct inode * nfs4_proc_create(struct inode *dir, struct qstr *name, 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, name, flags, sattr, cred); put_rpccred(cred); if (!IS_ERR(state)) { --- ./include/linux/nfs_xdr.h.orig 2005-02-01 23:47:38.000000000 +0100 +++ ./include/linux/nfs_xdr.h 2005-02-02 21:10:51.000000000 +0100 @@ -682,7 +682,7 @@ int (*write) (struct nfs_write_data *); int (*commit) (struct nfs_write_data *); struct inode * (*create) (struct inode *, struct qstr *, - 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 *);