Patch Detail
get:
Show a patch.
patch:
Update a patch.
put:
Update a patch.
GET /api/patches/808132/?format=api
{ "id": 808132, "url": "http://patchwork.ozlabs.org/api/patches/808132/?format=api", "web_url": "http://patchwork.ozlabs.org/project/qemu-devel/patch/20170831082210.8362-8-stefanha@redhat.com/", "project": { "id": 14, "url": "http://patchwork.ozlabs.org/api/projects/14/?format=api", "name": "QEMU Development", "link_name": "qemu-devel", "list_id": "qemu-devel.nongnu.org", "list_email": "qemu-devel@nongnu.org", "web_url": "", "scm_url": "", "webscm_url": "", "list_archive_url": "", "list_archive_url_format": "", "commit_url_format": "" }, "msgid": "<20170831082210.8362-8-stefanha@redhat.com>", "list_archive_url": null, "date": "2017-08-31T08:22:02", "name": "[PULL,for-2.10,07/15] throttle: Make burst_length 64bit and add range checks", "commit_ref": null, "pull_url": null, "state": "new", "archived": false, "hash": "f7923d3eac7d022f26f0ad5669f9067569b2c4a8", "submitter": { "id": 17227, "url": "http://patchwork.ozlabs.org/api/people/17227/?format=api", "name": "Stefan Hajnoczi", "email": "stefanha@redhat.com" }, "delegate": null, "mbox": "http://patchwork.ozlabs.org/project/qemu-devel/patch/20170831082210.8362-8-stefanha@redhat.com/mbox/", "series": [ { "id": 766, "url": "http://patchwork.ozlabs.org/api/series/766/?format=api", "web_url": "http://patchwork.ozlabs.org/project/qemu-devel/list/?series=766", "date": "2017-08-31T08:21:55", "name": "[PULL,for-2.10,01/15] nvme: Fix get/set number of queues feature, again", "version": 1, "mbox": "http://patchwork.ozlabs.org/series/766/mbox/" } ], "comments": "http://patchwork.ozlabs.org/api/patches/808132/comments/", "check": "pending", "checks": "http://patchwork.ozlabs.org/api/patches/808132/checks/", "tags": {}, "related": [], "headers": { "Return-Path": "<qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org>", "X-Original-To": "incoming@patchwork.ozlabs.org", "Delivered-To": "patchwork-incoming@bilbo.ozlabs.org", "Authentication-Results": [ "ozlabs.org;\n\tspf=pass (mailfrom) smtp.mailfrom=nongnu.org\n\t(client-ip=2001:4830:134:3::11; helo=lists.gnu.org;\n\tenvelope-from=qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org;\n\treceiver=<UNKNOWN>)", "ext-mx02.extmail.prod.ext.phx2.redhat.com;\n\tdmarc=none (p=none dis=none) header.from=redhat.com", "ext-mx02.extmail.prod.ext.phx2.redhat.com;\n\tspf=fail smtp.mailfrom=stefanha@redhat.com" ], "Received": [ "from lists.gnu.org (lists.gnu.org [IPv6:2001:4830:134:3::11])\n\t(using TLSv1 with cipher AES256-SHA (256/256 bits))\n\t(No client certificate requested)\n\tby ozlabs.org (Postfix) with ESMTPS id 3xjbCm5s3pz9t2M\n\tfor <incoming@patchwork.ozlabs.org>;\n\tThu, 31 Aug 2017 18:30:12 +1000 (AEST)", "from localhost ([::1]:54498 helo=lists.gnu.org)\n\tby lists.gnu.org with esmtp (Exim 4.71) (envelope-from\n\t<qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org>)\n\tid 1dnKra-0002sp-Rr\n\tfor incoming@patchwork.ozlabs.org; Thu, 31 Aug 2017 04:30:10 -0400", "from eggs.gnu.org ([2001:4830:134:3::10]:42516)\n\tby lists.gnu.org with esmtp (Exim 4.71)\n\t(envelope-from <stefanha@redhat.com>) id 1dnKkM-0005PZ-PM\n\tfor qemu-devel@nongnu.org; Thu, 31 Aug 2017 04:22:43 -0400", "from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71)\n\t(envelope-from <stefanha@redhat.com>) id 1dnKkI-0005tr-Qh\n\tfor qemu-devel@nongnu.org; Thu, 31 Aug 2017 04:22:42 -0400", "from mx1.redhat.com ([209.132.183.28]:39440)\n\tby eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32)\n\t(Exim 4.71) (envelope-from <stefanha@redhat.com>) id 1dnKkI-0005th-LE\n\tfor qemu-devel@nongnu.org; Thu, 31 Aug 2017 04:22:38 -0400", "from smtp.corp.redhat.com\n\t(int-mx03.intmail.prod.int.phx2.redhat.com [10.5.11.13])\n\t(using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits))\n\t(No client certificate requested)\n\tby mx1.redhat.com (Postfix) with ESMTPS id C351C67736;\n\tThu, 31 Aug 2017 08:22:37 +0000 (UTC)", "from localhost (ovpn-117-89.ams2.redhat.com [10.36.117.89])\n\tby smtp.corp.redhat.com (Postfix) with ESMTP id 197AB5C684;\n\tThu, 31 Aug 2017 08:22:34 +0000 (UTC)" ], "DMARC-Filter": "OpenDMARC Filter v1.3.2 mx1.redhat.com C351C67736", "From": "Stefan Hajnoczi <stefanha@redhat.com>", "To": "<qemu-devel@nongnu.org>", "Date": "Thu, 31 Aug 2017 09:22:02 +0100", "Message-Id": "<20170831082210.8362-8-stefanha@redhat.com>", "In-Reply-To": "<20170831082210.8362-1-stefanha@redhat.com>", "References": "<20170831082210.8362-1-stefanha@redhat.com>", "X-Scanned-By": "MIMEDefang 2.79 on 10.5.11.13", "X-Greylist": "Sender IP whitelisted, not delayed by milter-greylist-4.5.16\n\t(mx1.redhat.com [10.5.110.26]);\n\tThu, 31 Aug 2017 08:22:37 +0000 (UTC)", "X-detected-operating-system": "by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic]\n\t[fuzzy]", "X-Received-From": "209.132.183.28", "Subject": "[Qemu-devel] [PULL for-2.10 07/15] throttle: Make burst_length\n\t64bit and add range checks", "X-BeenThere": "qemu-devel@nongnu.org", "X-Mailman-Version": "2.1.21", "Precedence": "list", "List-Id": "<qemu-devel.nongnu.org>", "List-Unsubscribe": "<https://lists.nongnu.org/mailman/options/qemu-devel>,\n\t<mailto:qemu-devel-request@nongnu.org?subject=unsubscribe>", "List-Archive": "<http://lists.nongnu.org/archive/html/qemu-devel/>", "List-Post": "<mailto:qemu-devel@nongnu.org>", "List-Help": "<mailto:qemu-devel-request@nongnu.org?subject=help>", "List-Subscribe": "<https://lists.nongnu.org/mailman/listinfo/qemu-devel>,\n\t<mailto:qemu-devel-request@nongnu.org?subject=subscribe>", "Cc": "Peter Maydell <peter.maydell@linaro.org>,\n\tAlberto Garcia <berto@igalia.com>, Stefan Hajnoczi <stefanha@redhat.com>", "Errors-To": "qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org", "Sender": "\"Qemu-devel\"\n\t<qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org>" }, "content": "From: Alberto Garcia <berto@igalia.com>\n\nLeakyBucket.burst_length is defined as an unsigned integer but the\ncode never checks for overflows and it only makes sure that the value\nis not 0.\n\nIn practice this means that the user can set something like\nthrottling.iops-total-max-length=4294967300 despite being larger than\nUINT_MAX and the final value after casting to unsigned int will be 4.\n\nThis patch changes the data type to uint64_t. This does not increase\nthe storage size of LeakyBucket, and allows us to assign the value\ndirectly from qemu_opt_get_number() or BlockIOThrottle and then do the\nchecks directly in throttle_is_valid().\n\nThe value of burst_length does not have a specific upper limit,\nbut since the bucket size is defined by max * burst_length we have\nto prevent overflows. Instead of going for UINT64_MAX or something\nsimilar this patch reuses THROTTLE_VALUE_MAX, which allows I/O bursts\nof 1 GiB/s for 10 days in a row.\n\nSigned-off-by: Alberto Garcia <berto@igalia.com>\nMessage-id: 1b2e3049803f71cafb2e1fa1be4fb47147a0d398.1503580370.git.berto@igalia.com\nSigned-off-by: Stefan Hajnoczi <stefanha@redhat.com>\n---\n include/qemu/throttle.h | 2 +-\n util/throttle.c | 5 +++++\n 2 files changed, 6 insertions(+), 1 deletion(-)", "diff": "diff --git a/include/qemu/throttle.h b/include/qemu/throttle.h\nindex 6e31155fd4..8e01885d29 100644\n--- a/include/qemu/throttle.h\n+++ b/include/qemu/throttle.h\n@@ -81,7 +81,7 @@ typedef struct LeakyBucket {\n uint64_t max; /* leaky bucket max burst in units */\n double level; /* bucket level in units */\n double burst_level; /* bucket level in units (for computing bursts) */\n- unsigned burst_length; /* max length of the burst period, in seconds */\n+ uint64_t burst_length; /* max length of the burst period, in seconds */\n } LeakyBucket;\n \n /* The following structure is used to configure a ThrottleState\ndiff --git a/util/throttle.c b/util/throttle.c\nindex 80660ffd2c..b8c524336c 100644\n--- a/util/throttle.c\n+++ b/util/throttle.c\n@@ -354,6 +354,11 @@ bool throttle_is_valid(ThrottleConfig *cfg, Error **errp)\n return false;\n }\n \n+ if (bkt->max && bkt->burst_length > THROTTLE_VALUE_MAX / bkt->max) {\n+ error_setg(errp, \"burst length too high for this burst rate\");\n+ return false;\n+ }\n+\n if (bkt->max && !bkt->avg) {\n error_setg(errp, \"bps_max/iops_max require corresponding\"\n \" bps/iops values\");\n", "prefixes": [ "PULL", "for-2.10", "07/15" ] }