| From a84b69cb6e0a41e86bc593904faa6def3b957343 Mon Sep 17 00:00:00 2001 |
| From: Al Viro <viro@zeniv.linux.org.uk> |
| Date: Sat, 4 Jul 2015 16:04:19 -0400 |
| Subject: 9p: forgetting to cancel request on interrupted zero-copy RPC |
| |
| From: Al Viro <viro@zeniv.linux.org.uk> |
| |
| 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: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| |
| --- |
| net/9p/client.c | 3 ++- |
| 1 file changed, 2 insertions(+), 1 deletion(-) |
| |
| --- a/net/9p/client.c |
| +++ b/net/9p/client.c |
| @@ -828,7 +828,8 @@ static struct p9_req_t *p9_client_zc_rpc |
| if (err < 0) { |
| if (err == -EIO) |
| c->status = Disconnected; |
| - goto reterr; |
| + if (err != -ERESTARTSYS) |
| + goto reterr; |
| } |
| if (req->status == REQ_STATUS_ERROR) { |
| p9_debug(P9_DEBUG_ERROR, "req_status error %d\n", req->t_err); |