NFSv4: SETCLIENTID_CONFIRM should handle NFS4ERR_DELAY/NFS4ERR_RESOURCE
Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com>
This commit is contained in:
@@ -2849,8 +2849,7 @@ int nfs4_proc_setclientid(struct nfs4_client *clp, u32 program, unsigned short p
|
|||||||
return status;
|
return status;
|
||||||
}
|
}
|
||||||
|
|
||||||
int
|
static int _nfs4_proc_setclientid_confirm(struct nfs4_client *clp, struct rpc_cred *cred)
|
||||||
nfs4_proc_setclientid_confirm(struct nfs4_client *clp, struct rpc_cred *cred)
|
|
||||||
{
|
{
|
||||||
struct nfs_fsinfo fsinfo;
|
struct nfs_fsinfo fsinfo;
|
||||||
struct rpc_message msg = {
|
struct rpc_message msg = {
|
||||||
@@ -2874,6 +2873,24 @@ nfs4_proc_setclientid_confirm(struct nfs4_client *clp, struct rpc_cred *cred)
|
|||||||
return status;
|
return status;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int nfs4_proc_setclientid_confirm(struct nfs4_client *clp, struct rpc_cred *cred)
|
||||||
|
{
|
||||||
|
long timeout;
|
||||||
|
int err;
|
||||||
|
do {
|
||||||
|
err = _nfs4_proc_setclientid_confirm(clp, cred);
|
||||||
|
switch (err) {
|
||||||
|
case 0:
|
||||||
|
return err;
|
||||||
|
case -NFS4ERR_RESOURCE:
|
||||||
|
/* The IBM lawyers misread another document! */
|
||||||
|
case -NFS4ERR_DELAY:
|
||||||
|
err = nfs4_delay(clp->cl_rpcclient, &timeout);
|
||||||
|
}
|
||||||
|
} while (err == 0);
|
||||||
|
return err;
|
||||||
|
}
|
||||||
|
|
||||||
struct nfs4_delegreturndata {
|
struct nfs4_delegreturndata {
|
||||||
struct nfs4_delegreturnargs args;
|
struct nfs4_delegreturnargs args;
|
||||||
struct nfs4_delegreturnres res;
|
struct nfs4_delegreturnres res;
|
||||||
|
@@ -977,6 +977,7 @@ out:
|
|||||||
out_error:
|
out_error:
|
||||||
printk(KERN_WARNING "Error: state recovery failed on NFSv4 server %u.%u.%u.%u with error %d\n",
|
printk(KERN_WARNING "Error: state recovery failed on NFSv4 server %u.%u.%u.%u with error %d\n",
|
||||||
NIPQUAD(clp->cl_addr.s_addr), -status);
|
NIPQUAD(clp->cl_addr.s_addr), -status);
|
||||||
|
set_bit(NFS4CLNT_LEASE_EXPIRED, &clp->cl_state);
|
||||||
goto out;
|
goto out;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user