diff options
| -rw-r--r-- | net/sunrpc/clnt.c | 28 |
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? */ |
