Commit 78b576ce authored by Trond Myklebust's avatar Trond Myklebust

SUNRPC: Minor cleanup for call_transmit()

Signed-off-by: default avatarTrond Myklebust <trond.myklebust@hammerspace.com>
parent 7f3a1d1e
...@@ -1946,9 +1946,7 @@ call_transmit(struct rpc_task *task) ...@@ -1946,9 +1946,7 @@ call_transmit(struct rpc_task *task)
dprint_status(task); dprint_status(task);
task->tk_action = call_status; task->tk_action = call_transmit_status;
if (task->tk_status < 0)
return;
/* Encode here so that rpcsec_gss can use correct sequence number. */ /* Encode here so that rpcsec_gss can use correct sequence number. */
if (rpc_task_need_encode(task)) { if (rpc_task_need_encode(task)) {
rpc_xdr_encode(task); rpc_xdr_encode(task);
...@@ -1969,7 +1967,6 @@ call_transmit(struct rpc_task *task) ...@@ -1969,7 +1967,6 @@ call_transmit(struct rpc_task *task)
if (!xprt_prepare_transmit(task)) if (!xprt_prepare_transmit(task))
return; return;
task->tk_action = call_transmit_status;
xprt_transmit(task); xprt_transmit(task);
if (task->tk_status < 0) if (task->tk_status < 0)
return; return;
...@@ -1996,19 +1993,29 @@ call_transmit_status(struct rpc_task *task) ...@@ -1996,19 +1993,29 @@ call_transmit_status(struct rpc_task *task)
} }
switch (task->tk_status) { switch (task->tk_status) {
case -EAGAIN:
case -ENOBUFS:
break;
default: default:
dprint_status(task); dprint_status(task);
xprt_end_transmit(task); xprt_end_transmit(task);
break; 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 * Special cases: if we've been waiting on the
* socket's write_space() callback, or if the * socket's write_space() callback, or if the
* socket just returned a connection error, * socket just returned a connection error,
* then hold onto the transport lock. * 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 -ECONNREFUSED:
case -EHOSTDOWN: case -EHOSTDOWN:
case -ENETDOWN: case -ENETDOWN:
...@@ -2163,22 +2170,13 @@ call_status(struct rpc_task *task) ...@@ -2163,22 +2170,13 @@ call_status(struct rpc_task *task)
/* fall through */ /* fall through */
case -EPIPE: case -EPIPE:
case -ENOTCONN: case -ENOTCONN:
task->tk_action = call_bind;
break;
case -ENOBUFS:
rpc_delay(task, HZ>>2);
/* fall through */
case -EAGAIN: case -EAGAIN:
task->tk_action = call_transmit; task->tk_action = call_bind;
break; break;
case -EIO: case -EIO:
/* shutdown or soft timeout */ /* shutdown or soft timeout */
rpc_exit(task, status); rpc_exit(task, status);
break; break;
case -EBADMSG:
clear_bit(RPC_TASK_NEED_XMIT, &task->tk_runstate);
task->tk_action = call_transmit;
break;
default: default:
if (clnt->cl_chatty) if (clnt->cl_chatty)
printk("%s: RPC call returned error %d\n", printk("%s: RPC call returned error %d\n",
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment