| From 06b79081237eff3ebd8719af55265855d446f3e6 Mon Sep 17 00:00:00 2001 |
| From: Richard Jones <rjones@redhat.com> |
| Date: Thu, 11 Jun 2015 11:40:25 +0200 |
| Subject: [PATCH 25/30] block.curl: adding 'timeout' option |
| |
| Message-id: <1434022828-13037-19-git-send-email-rjones@redhat.com> |
| Patchwork-id: 65851 |
| O-Subject: [RHEL-7.2 qemu-kvm v3 PATCH 18/21] block.curl: adding 'timeout' option |
| Bugzilla: 1226684 |
| RH-Acked-by: Miroslav Rezanina <mrezanin@redhat.com> |
| RH-Acked-by: Stefan Hajnoczi <stefanha@redhat.com> |
| RH-Acked-by: Laszlo Ersek <lersek@redhat.com> |
| |
| From: Daniel Henrique Barboza <danielhb@linux.vnet.ibm.com> |
| |
| The curl hardcoded timeout (5 seconds) sometimes is not long |
| enough depending on the remote server configuration and network |
| traffic. The user should be able to set how much long he is |
| willing to wait for the connection. |
| |
| Adding a new option to set this timeout gives the user this |
| flexibility. The previous default timeout of 5 seconds will be |
| used if this option is not present. |
| |
| Reviewed-by: Fam Zheng <famz@redhat.com> |
| Signed-off-by: Daniel Henrique Barboza <danielhb@linux.vnet.ibm.com> |
| Reviewed-by: Benoit Canet <benoit.canet@nodalink.com> |
| Tested-by: Richard W.M. Jones <rjones@redhat.com> |
| Signed-off-by: Stefan Hajnoczi <stefanha@redhat.com> |
| |
| Upstream-status: 212aefaa53d142baa9a22f5aadd2e72eb916c0c0 |
| |
| Note this intentionally omits the documentation changes in |
| 'qemu-options.hx' from the upstream patch. |
| |
| Signed-off-by: Miroslav Rezanina <mrezanin@redhat.com> |
| |
| block/curl.c | 13 ++++++++++++- |
| 1 file changed, 12 insertions(+), 1 deletion(-) |
| |
| diff --git a/block/curl.c b/block/curl.c |
| index 2486449..1f1df4f 100644 |
| |
| |
| @@ -63,6 +63,7 @@ static CURLMcode __curl_multi_socket_action(CURLM *multi_handle, |
| #define CURL_NUM_ACB 8 |
| #define SECTOR_SIZE 512 |
| #define READ_AHEAD_DEFAULT (256 * 1024) |
| +#define CURL_TIMEOUT_DEFAULT 5 |
| |
| #define FIND_RET_NONE 0 |
| #define FIND_RET_OK 1 |
| @@ -71,6 +72,7 @@ static CURLMcode __curl_multi_socket_action(CURLM *multi_handle, |
| #define CURL_BLOCK_OPT_URL "url" |
| #define CURL_BLOCK_OPT_READAHEAD "readahead" |
| #define CURL_BLOCK_OPT_SSLVERIFY "sslverify" |
| +#define CURL_BLOCK_OPT_TIMEOUT "timeout" |
| |
| struct BDRVCURLState; |
| |
| @@ -109,6 +111,7 @@ typedef struct BDRVCURLState { |
| char *url; |
| size_t readahead_size; |
| bool sslverify; |
| + int timeout; |
| bool accept_range; |
| } BDRVCURLState; |
| |
| @@ -379,7 +382,7 @@ static CURLState *curl_init_state(BDRVCURLState *s) |
| curl_easy_setopt(state->curl, CURLOPT_URL, s->url); |
| curl_easy_setopt(state->curl, CURLOPT_SSL_VERIFYPEER, |
| (long) s->sslverify); |
| - curl_easy_setopt(state->curl, CURLOPT_TIMEOUT, 5); |
| + curl_easy_setopt(state->curl, CURLOPT_TIMEOUT, s->timeout); |
| curl_easy_setopt(state->curl, CURLOPT_WRITEFUNCTION, |
| (void *)curl_read_cb); |
| curl_easy_setopt(state->curl, CURLOPT_WRITEDATA, (void *)state); |
| @@ -443,6 +446,11 @@ static QemuOptsList runtime_opts = { |
| .type = QEMU_OPT_BOOL, |
| .help = "Verify SSL certificate" |
| }, |
| + { |
| + .name = CURL_BLOCK_OPT_TIMEOUT, |
| + .type = QEMU_OPT_NUMBER, |
| + .help = "Curl timeout" |
| + }, |
| { /* end of list */ } |
| }, |
| }; |
| @@ -475,6 +483,9 @@ static int curl_open(BlockDriverState *bs, QDict *options, int flags, |
| goto out_noclean; |
| } |
| |
| + s->timeout = qemu_opt_get_number(opts, CURL_BLOCK_OPT_TIMEOUT, |
| + CURL_TIMEOUT_DEFAULT); |
| + |
| s->sslverify = qemu_opt_get_bool(opts, CURL_BLOCK_OPT_SSLVERIFY, true); |
| |
| file = qemu_opt_get(opts, CURL_BLOCK_OPT_URL); |
| -- |
| 1.8.3.1 |
| |