diff options
author | Trond Myklebust <trond.myklebust@hammerspace.com> | 2019-04-15 11:54:13 -0400 |
---|---|---|
committer | Trond Myklebust <trond.myklebust@hammerspace.com> | 2019-04-17 16:07:28 -0400 |
commit | a7b1a4839ff979b4dd4fb6c1ccd31af11de9ca87 (patch) | |
tree | 48222176f78e8c189f43cf9d106adcf8183d75fc | |
parent | dc4060a5dc2557e6b5aa813bf5b73677299d62d2 (diff) |
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: Chuck Lever <chuck.lever@oracle.com>
Signed-off-by: Trond Myklebust <trond.myklebust@hammerspace.com>
Tested-by: Chuck Lever <chuck.lever@oracle.com>
-rw-r--r-- | net/sunrpc/clnt.c | 7 |
1 files changed, 5 insertions, 2 deletions
diff --git a/net/sunrpc/clnt.c b/net/sunrpc/clnt.c index 1d0395ef62c9..8ff11dc98d7f 100644 --- a/net/sunrpc/clnt.c +++ b/net/sunrpc/clnt.c | |||
@@ -2081,8 +2081,8 @@ call_transmit_status(struct rpc_task *task) | |||
2081 | * test first. | 2081 | * test first. |
2082 | */ | 2082 | */ |
2083 | if (rpc_task_transmitted(task)) { | 2083 | if (rpc_task_transmitted(task)) { |
2084 | if (task->tk_status == 0) | 2084 | task->tk_status = 0; |
2085 | xprt_request_wait_receive(task); | 2085 | xprt_request_wait_receive(task); |
2086 | return; | 2086 | return; |
2087 | } | 2087 | } |
2088 | 2088 | ||
@@ -2167,6 +2167,9 @@ call_bc_transmit_status(struct rpc_task *task) | |||
2167 | { | 2167 | { |
2168 | struct rpc_rqst *req = task->tk_rqstp; | 2168 | struct rpc_rqst *req = task->tk_rqstp; |
2169 | 2169 | ||
2170 | if (rpc_task_transmitted(task)) | ||
2171 | task->tk_status = 0; | ||
2172 | |||
2170 | dprint_status(task); | 2173 | dprint_status(task); |
2171 | 2174 | ||
2172 | switch (task->tk_status) { | 2175 | switch (task->tk_status) { |