From nobody Mon Feb 9 22:02:52 2026 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) client-ip=208.118.235.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zoho.com; spf=pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; Return-Path: Received: from lists.gnu.org (lists.gnu.org [208.118.235.17]) by mx.zohomail.com with SMTPS id 1494950418639187.6342016539403; Tue, 16 May 2017 09:00:18 -0700 (PDT) Received: from localhost ([::1]:42912 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dAetV-0007sF-1D for importer@patchew.org; Tue, 16 May 2017 12:00:17 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:46908) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dAeoK-0003dE-I4 for qemu-devel@nongnu.org; Tue, 16 May 2017 11:54:57 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1dAeoJ-0001jA-HW for qemu-devel@nongnu.org; Tue, 16 May 2017 11:54:56 -0400 Received: from mx1.redhat.com ([209.132.183.28]:52602) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1dAeoE-0001fO-P2; Tue, 16 May 2017 11:54:50 -0400 Received: from smtp.corp.redhat.com (int-mx01.intmail.prod.int.phx2.redhat.com [10.5.11.11]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id 8B56C3DBCC; Tue, 16 May 2017 15:54:39 +0000 (UTC) Received: from localhost (ovpn-116-10.phx2.redhat.com [10.3.116.10]) by smtp.corp.redhat.com (Postfix) with ESMTPS id 33C56A92B7; Tue, 16 May 2017 15:54:34 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mx1.redhat.com 8B56C3DBCC Authentication-Results: ext-mx06.extmail.prod.ext.phx2.redhat.com; dmarc=none (p=none dis=none) header.from=redhat.com Authentication-Results: ext-mx06.extmail.prod.ext.phx2.redhat.com; spf=pass smtp.mailfrom=jcody@redhat.com DKIM-Filter: OpenDKIM Filter v2.11.0 mx1.redhat.com 8B56C3DBCC From: Jeff Cody To: qemu-block@nongnu.org Date: Tue, 16 May 2017 11:54:18 -0400 Message-Id: <20170516155420.10106-7-jcody@redhat.com> In-Reply-To: <20170516155420.10106-1-jcody@redhat.com> References: <20170516155420.10106-1-jcody@redhat.com> X-Scanned-By: MIMEDefang 2.79 on 10.5.11.11 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.30]); Tue, 16 May 2017 15:54:49 +0000 (UTC) X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic] [fuzzy] X-Received-From: 209.132.183.28 Subject: [Qemu-devel] [PULL 6/8] curl: convert CURLAIOCB to byte values X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: peter.maydell@linaro.org, jcody@redhat.com, qemu-devel@nongnu.org, Paolo Bonzini Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail: RSF_0 Z_629925259 SPT_0 Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" From: Paolo Bonzini This is in preparation for the conversion from bdrv_aio_readv to bdrv_co_preadv, and it also requires changing some of the size_t values to uint64_t. This was broken before for disks > 2TB, but now it would break at 4GB. Reviewed-by: Jeff Cody Signed-off-by: Paolo Bonzini Reviewed-by: Max Reitz Message-id: 20170515100059.15795-6-pbonzini@redhat.com Signed-off-by: Jeff Cody --- block/curl.c | 44 ++++++++++++++++++++++---------------------- 1 file changed, 22 insertions(+), 22 deletions(-) diff --git a/block/curl.c b/block/curl.c index a522381..a71a428 100644 --- a/block/curl.c +++ b/block/curl.c @@ -97,8 +97,8 @@ typedef struct CURLAIOCB { BlockAIOCB common; QEMUIOVector *qiov; =20 - int64_t sector_num; - int nb_sectors; + uint64_t offset; + uint64_t bytes; =20 size_t start; size_t end; @@ -116,7 +116,7 @@ typedef struct CURLState CURL *curl; QLIST_HEAD(, CURLSocket) sockets; char *orig_buf; - size_t buf_start; + uint64_t buf_start; size_t buf_off; size_t buf_len; char range[128]; @@ -127,7 +127,7 @@ typedef struct CURLState typedef struct BDRVCURLState { CURLM *multi; QEMUTimer timer; - size_t len; + uint64_t len; CURLState states[CURL_NUM_STATES]; char *url; size_t readahead_size; @@ -258,7 +258,7 @@ static size_t curl_read_cb(void *ptr, size_t size, size= _t nmemb, void *opaque) continue; =20 if ((s->buf_off >=3D acb->end)) { - size_t request_length =3D acb->nb_sectors * BDRV_SECTOR_SIZE; + size_t request_length =3D acb->bytes; =20 qemu_iovec_from_buf(acb->qiov, 0, s->orig_buf + acb->start, acb->end - acb->start); @@ -283,18 +283,18 @@ read_end: } =20 /* Called with s->mutex held. */ -static int curl_find_buf(BDRVCURLState *s, size_t start, size_t len, +static int curl_find_buf(BDRVCURLState *s, uint64_t start, uint64_t len, CURLAIOCB *acb) { int i; - size_t end =3D start + len; - size_t clamped_end =3D MIN(end, s->len); - size_t clamped_len =3D clamped_end - start; + uint64_t end =3D start + len; + uint64_t clamped_end =3D MIN(end, s->len); + uint64_t clamped_len =3D clamped_end - start; =20 for (i=3D0; istates[i]; - size_t buf_end =3D (state->buf_start + state->buf_off); - size_t buf_fend =3D (state->buf_start + state->buf_len); + uint64_t buf_end =3D (state->buf_start + state->buf_off); + uint64_t buf_fend =3D (state->buf_start + state->buf_len); =20 if (!state->orig_buf) continue; @@ -810,7 +810,7 @@ static int curl_open(BlockDriverState *bs, QDict *optio= ns, int flags, } #endif =20 - s->len =3D (size_t)d; + s->len =3D d; =20 if ((!strncasecmp(s->url, "http://", strlen("http://")) || !strncasecmp(s->url, "https://", strlen("https://"))) @@ -819,7 +819,7 @@ static int curl_open(BlockDriverState *bs, QDict *optio= ns, int flags, "Server does not support 'range' (byte ranges)."); goto out; } - DPRINTF("CURL: Size =3D %zd\n", s->len); + DPRINTF("CURL: Size =3D %" PRIu64 "\n", s->len); =20 qemu_mutex_lock(&s->mutex); curl_clean_state(state); @@ -859,14 +859,14 @@ static void curl_readv_bh_cb(void *p) BlockDriverState *bs =3D acb->common.bs; BDRVCURLState *s =3D bs->opaque; =20 - size_t start =3D acb->sector_num * BDRV_SECTOR_SIZE; - size_t end; + uint64_t start =3D acb->offset; + uint64_t end; =20 qemu_mutex_lock(&s->mutex); =20 // In case we have the requested data already (e.g. read-ahead), // we can just call the callback and be done. - switch (curl_find_buf(s, start, acb->nb_sectors * BDRV_SECTOR_SIZE, ac= b)) { + switch (curl_find_buf(s, start, acb->bytes, acb)) { case FIND_RET_OK: ret =3D 0; goto out; @@ -894,7 +894,7 @@ static void curl_readv_bh_cb(void *p) } =20 acb->start =3D 0; - acb->end =3D MIN(acb->nb_sectors * BDRV_SECTOR_SIZE, s->len - start); + acb->end =3D MIN(acb->bytes, s->len - start); =20 state->buf_off =3D 0; g_free(state->orig_buf); @@ -909,9 +909,9 @@ static void curl_readv_bh_cb(void *p) } state->acb[0] =3D acb; =20 - snprintf(state->range, 127, "%zd-%zd", start, end); - DPRINTF("CURL (AIO): Reading %llu at %zd (%s)\n", - (acb->nb_sectors * BDRV_SECTOR_SIZE), start, state->range); + snprintf(state->range, 127, "%" PRIu64 "-%" PRIu64, start, end); + DPRINTF("CURL (AIO): Reading %" PRIu64 " at %" PRIu64 " (%s)\n", + acb->bytes, start, state->range); curl_easy_setopt(state->curl, CURLOPT_RANGE, state->range); =20 curl_multi_add_handle(s->multi, state->curl); @@ -936,8 +936,8 @@ static BlockAIOCB *curl_aio_readv(BlockDriverState *bs, acb =3D qemu_aio_get(&curl_aiocb_info, bs, cb, opaque); =20 acb->qiov =3D qiov; - acb->sector_num =3D sector_num; - acb->nb_sectors =3D nb_sectors; + acb->offset =3D sector_num * BDRV_SECTOR_SIZE; + acb->bytes =3D nb_sectors * BDRV_SECTOR_SIZE; =20 aio_bh_schedule_oneshot(bdrv_get_aio_context(bs), curl_readv_bh_cb, ac= b); return &acb->common; --=20 2.9.3