|
|
9ae3a8 |
From 188c4737c54787bbd734c628121f7f0e4f833cd1 Mon Sep 17 00:00:00 2001
|
|
|
9ae3a8 |
From: Richard Jones <rjones@redhat.com>
|
|
|
9ae3a8 |
Date: Thu, 11 Jun 2015 11:40:18 +0200
|
|
|
9ae3a8 |
Subject: [PATCH 18/30] curl: Fix hang reading from slow connections
|
|
|
9ae3a8 |
|
|
|
9ae3a8 |
Message-id: <1434022828-13037-12-git-send-email-rjones@redhat.com>
|
|
|
9ae3a8 |
Patchwork-id: 65847
|
|
|
9ae3a8 |
O-Subject: [RHEL-7.2 qemu-kvm v3 PATCH 11/21] curl: Fix hang reading from slow connections
|
|
|
9ae3a8 |
Bugzilla: 1226684
|
|
|
9ae3a8 |
RH-Acked-by: Miroslav Rezanina <mrezanin@redhat.com>
|
|
|
9ae3a8 |
RH-Acked-by: Stefan Hajnoczi <stefanha@redhat.com>
|
|
|
9ae3a8 |
RH-Acked-by: Laszlo Ersek <lersek@redhat.com>
|
|
|
9ae3a8 |
|
|
|
9ae3a8 |
From: Matthew Booth <mbooth@redhat.com>
|
|
|
9ae3a8 |
|
|
|
9ae3a8 |
When receiving a new aio read request, we first look for an existing
|
|
|
9ae3a8 |
transaction whose range will cover the read request by the time it
|
|
|
9ae3a8 |
completes. However, we weren't checking that the existing transaction
|
|
|
9ae3a8 |
was still active. If it had timed out, we were adding the request to a
|
|
|
9ae3a8 |
transaction which would never complete and had already been cancelled,
|
|
|
9ae3a8 |
resulting in a hang.
|
|
|
9ae3a8 |
|
|
|
9ae3a8 |
Signed-off-by: Matthew Booth <mbooth@redhat.com>
|
|
|
9ae3a8 |
Tested-by: Richard W.M. Jones <rjones@redhat.com>
|
|
|
9ae3a8 |
Signed-off-by: Kevin Wolf <kwolf@redhat.com>
|
|
|
9ae3a8 |
|
|
|
9ae3a8 |
Upstream-status: b7079df4100069959f4e9d90d5cb5ba7d4ebbf1a
|
|
|
9ae3a8 |
Signed-off-by: Miroslav Rezanina <mrezanin@redhat.com>
|
|
|
9ae3a8 |
---
|
|
|
9ae3a8 |
block/curl.c | 3 ++-
|
|
|
9ae3a8 |
1 file changed, 2 insertions(+), 1 deletion(-)
|
|
|
9ae3a8 |
|
|
|
9ae3a8 |
diff --git a/block/curl.c b/block/curl.c
|
|
|
9ae3a8 |
index 41cf015..1bff71a 100644
|
|
|
9ae3a8 |
--- a/block/curl.c
|
|
|
9ae3a8 |
+++ b/block/curl.c
|
|
|
9ae3a8 |
@@ -220,7 +220,8 @@ static int curl_find_buf(BDRVCURLState *s, size_t start, size_t len,
|
|
|
9ae3a8 |
}
|
|
|
9ae3a8 |
|
|
|
9ae3a8 |
// Wait for unfinished chunks
|
|
|
9ae3a8 |
- if ((start >= state->buf_start) &&
|
|
|
9ae3a8 |
+ if (state->in_use &&
|
|
|
9ae3a8 |
+ (start >= state->buf_start) &&
|
|
|
9ae3a8 |
(start <= buf_fend) &&
|
|
|
9ae3a8 |
(end >= state->buf_start) &&
|
|
|
9ae3a8 |
(end <= buf_fend))
|
|
|
9ae3a8 |
--
|
|
|
9ae3a8 |
1.8.3.1
|
|
|
9ae3a8 |
|