mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2025-01-06 13:16:22 +00:00
NFSv4.1: fix handling NFS4ERR_DELAY when testing for session trunking
Currently when client sends an EXCHANGE_ID for a possible trunked
connection, for any error that happened, the trunk will be thrown
out. However, an NFS4ERR_DELAY is a transient error that should be
retried instead.
Fixes: e818bd085b
("NFSv4.1 remove xprt from xprt_switch if session trunking test fails")
Signed-off-by: Olga Kornievskaia <kolga@netapp.com>
Signed-off-by: Trond Myklebust <trond.myklebust@hammerspace.com>
This commit is contained in:
parent
a68c6fbb63
commit
6bd1a77dc7
@ -8959,6 +8959,7 @@ void nfs4_test_session_trunk(struct rpc_clnt *clnt, struct rpc_xprt *xprt,
|
|||||||
|
|
||||||
sp4_how = (adata->clp->cl_sp4_flags == 0 ? SP4_NONE : SP4_MACH_CRED);
|
sp4_how = (adata->clp->cl_sp4_flags == 0 ? SP4_NONE : SP4_MACH_CRED);
|
||||||
|
|
||||||
|
try_again:
|
||||||
/* Test connection for session trunking. Async exchange_id call */
|
/* Test connection for session trunking. Async exchange_id call */
|
||||||
task = nfs4_run_exchange_id(adata->clp, adata->cred, sp4_how, xprt);
|
task = nfs4_run_exchange_id(adata->clp, adata->cred, sp4_how, xprt);
|
||||||
if (IS_ERR(task))
|
if (IS_ERR(task))
|
||||||
@ -8971,11 +8972,15 @@ void nfs4_test_session_trunk(struct rpc_clnt *clnt, struct rpc_xprt *xprt,
|
|||||||
|
|
||||||
if (status == 0)
|
if (status == 0)
|
||||||
rpc_clnt_xprt_switch_add_xprt(clnt, xprt);
|
rpc_clnt_xprt_switch_add_xprt(clnt, xprt);
|
||||||
else if (rpc_clnt_xprt_switch_has_addr(clnt,
|
else if (status != -NFS4ERR_DELAY && rpc_clnt_xprt_switch_has_addr(clnt,
|
||||||
(struct sockaddr *)&xprt->addr))
|
(struct sockaddr *)&xprt->addr))
|
||||||
rpc_clnt_xprt_switch_remove_xprt(clnt, xprt);
|
rpc_clnt_xprt_switch_remove_xprt(clnt, xprt);
|
||||||
|
|
||||||
rpc_put_task(task);
|
rpc_put_task(task);
|
||||||
|
if (status == -NFS4ERR_DELAY) {
|
||||||
|
ssleep(1);
|
||||||
|
goto try_again;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
EXPORT_SYMBOL_GPL(nfs4_test_session_trunk);
|
EXPORT_SYMBOL_GPL(nfs4_test_session_trunk);
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user