aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--net/sunrpc/clnt.c28
1 files changed, 14 insertions, 14 deletions
diff --git a/net/sunrpc/clnt.c b/net/sunrpc/clnt.c
index 94a653be8e25..627a87a71f8b 100644
--- a/net/sunrpc/clnt.c
+++ b/net/sunrpc/clnt.c
@@ -2426,17 +2426,21 @@ call_decode(struct rpc_task *task)
2426 return; 2426 return;
2427 case -EAGAIN: 2427 case -EAGAIN:
2428 task->tk_status = 0; 2428 task->tk_status = 0;
2429 /* Note: rpc_decode_header() may have freed the RPC slot */ 2429 xdr_free_bvec(&req->rq_rcv_buf);
2430 if (task->tk_rqstp == req) { 2430 req->rq_reply_bytes_recvd = 0;
2431 xdr_free_bvec(&req->rq_rcv_buf); 2431 req->rq_rcv_buf.len = 0;
2432 req->rq_reply_bytes_recvd = 0; 2432 if (task->tk_client->cl_discrtry)
2433 req->rq_rcv_buf.len = 0; 2433 xprt_conditional_disconnect(req->rq_xprt,
2434 if (task->tk_client->cl_discrtry) 2434 req->rq_connect_cookie);
2435 xprt_conditional_disconnect(req->rq_xprt,
2436 req->rq_connect_cookie);
2437 }
2438 task->tk_action = call_encode; 2435 task->tk_action = call_encode;
2439 rpc_check_timeout(task); 2436 rpc_check_timeout(task);
2437 break;
2438 case -EKEYREJECTED:
2439 task->tk_action = call_reserve;
2440 rpc_check_timeout(task);
2441 rpcauth_invalcred(task);
2442 /* Ensure we obtain a new XID if we retry! */
2443 xprt_release(task);
2440 } 2444 }
2441} 2445}
2442 2446
@@ -2572,11 +2576,7 @@ out_msg_denied:
2572 break; 2576 break;
2573 task->tk_cred_retry--; 2577 task->tk_cred_retry--;
2574 trace_rpc__stale_creds(task); 2578 trace_rpc__stale_creds(task);
2575 rpcauth_invalcred(task); 2579 return -EKEYREJECTED;
2576 /* Ensure we obtain a new XID! */
2577 xprt_release(task);
2578 task->tk_action = call_reserve;
2579 return -EAGAIN;
2580 case rpc_autherr_badcred: 2580 case rpc_autherr_badcred:
2581 case rpc_autherr_badverf: 2581 case rpc_autherr_badverf:
2582 /* possibly garbled cred/verf? */ 2582 /* possibly garbled cred/verf? */