aboutsummaryrefslogtreecommitdiffstats
path: root/net
diff options
context:
space:
mode:
authorAl Viro <viro@zeniv.linux.org.uk>2015-07-04 16:04:19 -0400
committerBen Hutchings <ben@decadent.org.uk>2015-08-12 16:33:19 +0200
commitc45a8130fdee875c9d7b25ba50864aae1a1dafa3 (patch)
treed41b07561a9533e9e1f6cfc515aef1ae738b7bdf /net
parent20ca0fb65b0248aa073cdb9d090c4720605d0499 (diff)
downloadkernel_samsung_smdk4412-c45a8130fdee875c9d7b25ba50864aae1a1dafa3.zip
kernel_samsung_smdk4412-c45a8130fdee875c9d7b25ba50864aae1a1dafa3.tar.gz
kernel_samsung_smdk4412-c45a8130fdee875c9d7b25ba50864aae1a1dafa3.tar.bz2
9p: forgetting to cancel request on interrupted zero-copy RPC
commit a84b69cb6e0a41e86bc593904faa6def3b957343 upstream. 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. Signed-off-by: Al Viro <viro@zeniv.linux.org.uk> Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
Diffstat (limited to 'net')
-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 854ca7a..e958178 100644
--- a/net/9p/client.c
+++ b/net/9p/client.c
@@ -824,7 +824,8 @@ static struct p9_req_t *p9_client_zc_rpc(struct p9_client *c, int8_t type,
if (err < 0) {
if (err == -EIO)
c->status = Disconnected;
- goto reterr;
+ if (err != -ERESTARTSYS)
+ goto reterr;
}
if (req->status == REQ_STATUS_ERROR) {
P9_DPRINTK(P9_DEBUG_ERROR, "req_status error %d\n", req->t_err);