aboutsummaryrefslogtreecommitdiffstats
path: root/net/sunrpc
diff options
context:
space:
mode:
authorTrond Myklebust <Trond.Myklebust@netapp.com>2008-04-22 16:47:55 -0400
committerTrond Myklebust <Trond.Myklebust@netapp.com>2008-04-24 13:53:46 -0400
commitb48633bd086d21f4a2a5bea96c7e6c7ba58eb60c (patch)
tree334f66cced8488e54cbd7c80ed56e81d6cc0ceb4 /net/sunrpc
parenta3dab293539031b0970585b9b355cebbc91ecbd4 (diff)
SUNRPC: Invalidate the RPCSEC_GSS session if the server dropped the request
RFC 2203 requires the server to drop the request if it believes the RPCSEC_GSS context is out of sequence. The problem is that we have no way on the client to know why the server dropped the request. In order to avoid spinning forever trying to resend the request, the safe approach is therefore to always invalidate the RPCSEC_GSS context on every major timeout. Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com>
Diffstat (limited to 'net/sunrpc')
-rw-r--r--net/sunrpc/clnt.c5
1 files changed, 5 insertions, 0 deletions
diff --git a/net/sunrpc/clnt.c b/net/sunrpc/clnt.c
index 8773b4342c92..c6efb982057b 100644
--- a/net/sunrpc/clnt.c
+++ b/net/sunrpc/clnt.c
@@ -1173,6 +1173,11 @@ call_timeout(struct rpc_task *task)
1173 clnt->cl_protname, clnt->cl_server); 1173 clnt->cl_protname, clnt->cl_server);
1174 } 1174 }
1175 rpc_force_rebind(clnt); 1175 rpc_force_rebind(clnt);
1176 /*
1177 * Did our request time out due to an RPCSEC_GSS out-of-sequence
1178 * event? RFC2203 requires the server to drop all such requests.
1179 */
1180 rpcauth_invalcred(task);
1176 1181
1177retry: 1182retry:
1178 clnt->cl_stats->rpcretrans++; 1183 clnt->cl_stats->rpcretrans++;