summaryrefslogtreecommitdiffstats
path: root/net/sunrpc/clnt.c
diff options
context:
space:
mode:
authorTrond Myklebust <trond.myklebust@hammerspace.com>2018-08-28 15:20:10 +0200
committerTrond Myklebust <trond.myklebust@hammerspace.com>2018-09-30 21:35:14 +0200
commit78b576ced2f52f13e54955c89ab41eca9163671d (patch)
tree29d6e23f2886420c7963a7292b2ca12c6bcca0d4 /net/sunrpc/clnt.c
parentSUNRPC: Refactor xprt_transmit() to remove wait for reply code (diff)
downloadlinux-78b576ced2f52f13e54955c89ab41eca9163671d.tar.xz
linux-78b576ced2f52f13e54955c89ab41eca9163671d.zip
SUNRPC: Minor cleanup for call_transmit()
Signed-off-by: Trond Myklebust <trond.myklebust@hammerspace.com>
Diffstat (limited to 'net/sunrpc/clnt.c')
-rw-r--r--net/sunrpc/clnt.c32
1 files changed, 15 insertions, 17 deletions
diff --git a/net/sunrpc/clnt.c b/net/sunrpc/clnt.c
index 775d6e80b6e8..be0f06a8156b 100644
--- a/net/sunrpc/clnt.c
+++ b/net/sunrpc/clnt.c
@@ -1946,9 +1946,7 @@ call_transmit(struct rpc_task *task)
dprint_status(task);
- task->tk_action = call_status;
- if (task->tk_status < 0)
- return;
+ task->tk_action = call_transmit_status;
/* Encode here so that rpcsec_gss can use correct sequence number. */
if (rpc_task_need_encode(task)) {
rpc_xdr_encode(task);
@@ -1969,7 +1967,6 @@ call_transmit(struct rpc_task *task)
if (!xprt_prepare_transmit(task))
return;
- task->tk_action = call_transmit_status;
xprt_transmit(task);
if (task->tk_status < 0)
return;
@@ -1996,19 +1993,29 @@ call_transmit_status(struct rpc_task *task)
}
switch (task->tk_status) {
- case -EAGAIN:
- case -ENOBUFS:
- break;
default:
dprint_status(task);
xprt_end_transmit(task);
break;
+ case -EBADMSG:
+ clear_bit(RPC_TASK_NEED_XMIT, &task->tk_runstate);
+ task->tk_action = call_transmit;
+ task->tk_status = 0;
+ xprt_end_transmit(task);
+ break;
/*
* Special cases: if we've been waiting on the
* socket's write_space() callback, or if the
* socket just returned a connection error,
* then hold onto the transport lock.
*/
+ case -ENOBUFS:
+ rpc_delay(task, HZ>>2);
+ /* fall through */
+ case -EAGAIN:
+ task->tk_action = call_transmit;
+ task->tk_status = 0;
+ break;
case -ECONNREFUSED:
case -EHOSTDOWN:
case -ENETDOWN:
@@ -2163,22 +2170,13 @@ call_status(struct rpc_task *task)
/* fall through */
case -EPIPE:
case -ENOTCONN:
- task->tk_action = call_bind;
- break;
- case -ENOBUFS:
- rpc_delay(task, HZ>>2);
- /* fall through */
case -EAGAIN:
- task->tk_action = call_transmit;
+ task->tk_action = call_bind;
break;
case -EIO:
/* shutdown or soft timeout */
rpc_exit(task, status);
break;
- case -EBADMSG:
- clear_bit(RPC_TASK_NEED_XMIT, &task->tk_runstate);
- task->tk_action = call_transmit;
- break;
default:
if (clnt->cl_chatty)
printk("%s: RPC call returned error %d\n",