NFSv4: Send unmapped uid/gids to the server when using auth_sys
The new behaviour is enabled using the new module parameter 'nfs4_disable_idmapping'. Note that if the server rejects an unmapped uid or gid, then the client will automatically switch back to using the idmapper. Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com>
This commit is contained in:
@@ -244,7 +244,7 @@ static int nfs4_delay(struct rpc_clnt *clnt, long *timeout)
|
||||
/* This is the error handling routine for processes that are allowed
|
||||
* to sleep.
|
||||
*/
|
||||
static int nfs4_handle_exception(const struct nfs_server *server, int errorcode, struct nfs4_exception *exception)
|
||||
static int nfs4_handle_exception(struct nfs_server *server, int errorcode, struct nfs4_exception *exception)
|
||||
{
|
||||
struct nfs_client *clp = server->nfs_client;
|
||||
struct nfs4_state *state = exception->state;
|
||||
@@ -296,6 +296,19 @@ static int nfs4_handle_exception(const struct nfs_server *server, int errorcode,
|
||||
break;
|
||||
case -NFS4ERR_OLD_STATEID:
|
||||
exception->retry = 1;
|
||||
break;
|
||||
case -NFS4ERR_BADOWNER:
|
||||
/* The following works around a Linux server bug! */
|
||||
case -NFS4ERR_BADNAME:
|
||||
if (server->caps & NFS_CAP_UIDGID_NOMAP) {
|
||||
server->caps &= ~NFS_CAP_UIDGID_NOMAP;
|
||||
exception->retry = 1;
|
||||
printk(KERN_WARNING "NFS: v4 server %s "
|
||||
"does not accept raw "
|
||||
"uid/gids. "
|
||||
"Reenabling the idmapper.\n",
|
||||
server->nfs_client->cl_hostname);
|
||||
}
|
||||
}
|
||||
/* We failed to handle the error */
|
||||
return nfs4_map_errors(ret);
|
||||
|
Reference in New Issue
Block a user