浏览代码

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>
Al Viro 10 年之前
父节点
当前提交
a84b69cb6e
共有 1 个文件被更改,包括 2 次插入1 次删除
  1. 2 1
      net/9p/client.c

+ 2 - 1
net/9p/client.c

@@ -843,7 +843,8 @@ static struct p9_req_t *p9_client_zc_rpc(struct p9_client *c, int8_t type,
 	if (err < 0) {
 	if (err < 0) {
 		if (err == -EIO)
 		if (err == -EIO)
 			c->status = Disconnected;
 			c->status = Disconnected;
-		goto reterr;
+		if (err != -ERESTARTSYS)
+			goto reterr;
 	}
 	}
 	if (req->status == REQ_STATUS_ERROR) {
 	if (req->status == REQ_STATUS_ERROR) {
 		p9_debug(P9_DEBUG_ERROR, "req_status error %d\n", req->t_err);
 		p9_debug(P9_DEBUG_ERROR, "req_status error %d\n", req->t_err);