Commit a7b1a483 authored by Trond Myklebust's avatar Trond Myklebust

SUNRPC: Ignore queue transmission errors on successful transmission

If a request transmission fails due to write space or slot unavailability
errors, but the queued task then gets transmitted before it has time to
process the error in call_transmit_status() or call_bc_transmit_status(),
we need to suppress the transmission error code to prevent it from leaking
out of the RPC layer.
Reported-by: default avatarChuck Lever <chuck.lever@oracle.com>
Signed-off-by: default avatarTrond Myklebust <trond.myklebust@hammerspace.com>
Tested-by: default avatarChuck Lever <chuck.lever@oracle.com>
parent dc4060a5
...@@ -2081,7 +2081,7 @@ call_transmit_status(struct rpc_task *task) ...@@ -2081,7 +2081,7 @@ call_transmit_status(struct rpc_task *task)
* test first. * test first.
*/ */
if (rpc_task_transmitted(task)) { if (rpc_task_transmitted(task)) {
if (task->tk_status == 0) task->tk_status = 0;
xprt_request_wait_receive(task); xprt_request_wait_receive(task);
return; return;
} }
...@@ -2167,6 +2167,9 @@ call_bc_transmit_status(struct rpc_task *task) ...@@ -2167,6 +2167,9 @@ call_bc_transmit_status(struct rpc_task *task)
{ {
struct rpc_rqst *req = task->tk_rqstp; struct rpc_rqst *req = task->tk_rqstp;
if (rpc_task_transmitted(task))
task->tk_status = 0;
dprint_status(task); dprint_status(task);
switch (task->tk_status) { switch (task->tk_status) {
......
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