aboutsummaryrefslogtreecommitdiffstats
path: root/net/9p
diff options
context:
space:
mode:
authorAl Viro <viro@zeniv.linux.org.uk>2015-07-04 16:04:19 -0400
committerAl Viro <viro@zeniv.linux.org.uk>2015-07-04 16:04:19 -0400
commita84b69cb6e0a41e86bc593904faa6def3b957343 (patch)
tree74faea3dcd270a007885d20cb57973d0189731a5 /net/9p
parent43c3dd08da890e458f670b4fc0630513fb405620 (diff)
9p: forgetting to cancel request on interrupted zero-copy RPC
If we'd already sent a request and decide to abort it, we *must* issue TFLUSH properly and not just blindly reuse the tag, or we'll get seriously screwed when response eventually arrives and we confuse it for response to later request that had reused the same tag. Cc: stable@vger.kernel.org # v3.2 and later Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
Diffstat (limited to 'net/9p')
-rw-r--r--net/9p/client.c3
1 files changed, 2 insertions, 1 deletions
diff --git a/net/9p/client.c b/net/9p/client.c
index 6f4c4c88db84..28f36e4556f9 100644
--- a/net/9p/client.c
+++ b/net/9p/client.c
@@ -843,7 +843,8 @@ static struct p9_req_t *p9_client_zc_rpc(struct p9_client *c, int8_t type,
843 if (err < 0) { 843 if (err < 0) {
844 if (err == -EIO) 844 if (err == -EIO)
845 c->status = Disconnected; 845 c->status = Disconnected;
846 goto reterr; 846 if (err != -ERESTARTSYS)
847 goto reterr;
847 } 848 }
848 if (req->status == REQ_STATUS_ERROR) { 849 if (req->status == REQ_STATUS_ERROR) {
849 p9_debug(P9_DEBUG_ERROR, "req_status error %d\n", req->t_err); 850 p9_debug(P9_DEBUG_ERROR, "req_status error %d\n", req->t_err);