From nobody Wed Nov 5 00:42:05 2025 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.zohomail.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 150090700128050.59988747741795; Mon, 24 Jul 2017 07:36:41 -0700 (PDT) Received: from localhost ([::1]:55201 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dZeTQ-0004VV-0W for importer@patchew.org; Mon, 24 Jul 2017 10:36:40 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:45567) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dZePT-0001m4-Ql for qemu-devel@nongnu.org; Mon, 24 Jul 2017 10:32:36 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1dZePQ-0007Bt-Ds for qemu-devel@nongnu.org; Mon, 24 Jul 2017 10:32:35 -0400 Received: from mx1.redhat.com ([209.132.183.28]:59930) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1dZePJ-00073s-8X; Mon, 24 Jul 2017 10:32:25 -0400 Received: from smtp.corp.redhat.com (int-mx03.intmail.prod.int.phx2.redhat.com [10.5.11.13]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id 24508883D4; Mon, 24 Jul 2017 14:32:24 +0000 (UTC) Received: from noname.str.redhat.com (dhcp-192-175.str.redhat.com [10.33.192.175]) by smtp.corp.redhat.com (Postfix) with ESMTP id 27BDD60A9B; Mon, 24 Jul 2017 14:32:22 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mx1.redhat.com 24508883D4 Authentication-Results: ext-mx02.extmail.prod.ext.phx2.redhat.com; dmarc=none (p=none dis=none) header.from=redhat.com Authentication-Results: ext-mx02.extmail.prod.ext.phx2.redhat.com; spf=pass smtp.mailfrom=kwolf@redhat.com DKIM-Filter: OpenDKIM Filter v2.11.0 mx1.redhat.com 24508883D4 From: Kevin Wolf To: qemu-block@nongnu.org Date: Mon, 24 Jul 2017 16:32:06 +0200 Message-Id: <1500906730-26467-2-git-send-email-kwolf@redhat.com> In-Reply-To: <1500906730-26467-1-git-send-email-kwolf@redhat.com> References: <1500906730-26467-1-git-send-email-kwolf@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 (mx1.redhat.com [10.5.110.26]); Mon, 24 Jul 2017 14:32:24 +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 1/5] iotests: Remove a few tests from 'quick' group 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: kwolf@redhat.com, qemu-devel@nongnu.org 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: Eric Blake A run of './check -qcow2 -g quick' on my machine produced only two tests that took longer than 5 seconds; 178 took 18, and 189 took 7. Remove them from the quick group. Signed-off-by: Eric Blake Reviewed-by: John Snow Reviewed-by: Jeff Cody Reviewed-by: Stefan Hajnoczi Signed-off-by: Kevin Wolf --- tests/qemu-iotests/group | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tests/qemu-iotests/group b/tests/qemu-iotests/group index 0961f8c..287f0ea 100644 --- a/tests/qemu-iotests/group +++ b/tests/qemu-iotests/group @@ -175,7 +175,7 @@ 175 auto quick 176 rw auto backing 177 rw auto quick -178 auto quick +178 auto 179 rw auto quick 181 rw auto migration 182 rw auto quick @@ -183,4 +183,4 @@ 185 rw auto 186 rw auto 188 rw auto quick -189 rw auto quick +189 rw auto --=20 1.8.3.1 From nobody Wed Nov 5 00:42:05 2025 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.zohomail.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 1500906860555940.2332117461478; Mon, 24 Jul 2017 07:34:20 -0700 (PDT) Received: from localhost ([::1]:55185 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dZeR7-0002h4-6o for importer@patchew.org; Mon, 24 Jul 2017 10:34:17 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:45546) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dZePS-0001kH-6d for qemu-devel@nongnu.org; Mon, 24 Jul 2017 10:32:35 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1dZePM-00077m-I5 for qemu-devel@nongnu.org; Mon, 24 Jul 2017 10:32:34 -0400 Received: from mx1.redhat.com ([209.132.183.28]:40586) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1dZePK-00074p-BY; Mon, 24 Jul 2017 10:32:26 -0400 Received: from smtp.corp.redhat.com (int-mx03.intmail.prod.int.phx2.redhat.com [10.5.11.13]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id 36D25624BB; Mon, 24 Jul 2017 14:32:25 +0000 (UTC) Received: from noname.str.redhat.com (dhcp-192-175.str.redhat.com [10.33.192.175]) by smtp.corp.redhat.com (Postfix) with ESMTP id 6311F60A9B; Mon, 24 Jul 2017 14:32:24 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mx1.redhat.com 36D25624BB Authentication-Results: ext-mx10.extmail.prod.ext.phx2.redhat.com; dmarc=none (p=none dis=none) header.from=redhat.com Authentication-Results: ext-mx10.extmail.prod.ext.phx2.redhat.com; spf=pass smtp.mailfrom=kwolf@redhat.com DKIM-Filter: OpenDKIM Filter v2.11.0 mx1.redhat.com 36D25624BB From: Kevin Wolf To: qemu-block@nongnu.org Date: Mon, 24 Jul 2017 16:32:07 +0200 Message-Id: <1500906730-26467-3-git-send-email-kwolf@redhat.com> In-Reply-To: <1500906730-26467-1-git-send-email-kwolf@redhat.com> References: <1500906730-26467-1-git-send-email-kwolf@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 (mx1.redhat.com [10.5.110.39]); Mon, 24 Jul 2017 14:32:25 +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 2/5] dirty-bitmap: Report BlockDirtyInfo.count in bytes, as documented 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: kwolf@redhat.com, qemu-devel@nongnu.org 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: Eric Blake We've been documenting the value in bytes since its introduction in commit b9a9b3a4 (v1.3), where it was actually reported in bytes. Commit e4654d2 (v2.0) then removed things from block/qapi.c, in preparation for a rewrite to a list of dirty sectors in the next commit 21b5683 in block.c, but the new code mistakenly started reporting in sectors. Fixes: https://bugzilla.redhat.com/1441460 CC: qemu-stable@nongnu.org Signed-off-by: Eric Blake Reviewed-by: John Snow Reviewed-by: Stefan Hajnoczi Signed-off-by: Kevin Wolf --- block/dirty-bitmap.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/block/dirty-bitmap.c b/block/dirty-bitmap.c index 543bddb..30462d4 100644 --- a/block/dirty-bitmap.c +++ b/block/dirty-bitmap.c @@ -461,7 +461,7 @@ BlockDirtyInfoList *bdrv_query_dirty_bitmaps(BlockDrive= rState *bs) QLIST_FOREACH(bm, &bs->dirty_bitmaps, list) { BlockDirtyInfo *info =3D g_new0(BlockDirtyInfo, 1); BlockDirtyInfoList *entry =3D g_new0(BlockDirtyInfoList, 1); - info->count =3D bdrv_get_dirty_count(bm); + info->count =3D bdrv_get_dirty_count(bm) << BDRV_SECTOR_BITS; info->granularity =3D bdrv_dirty_bitmap_granularity(bm); info->has_name =3D !!bm->name; info->name =3D g_strdup(bm->name); --=20 1.8.3.1 From nobody Wed Nov 5 00:42:05 2025 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.zohomail.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 1500906849744631.1414835108733; Mon, 24 Jul 2017 07:34:09 -0700 (PDT) Received: from localhost ([::1]:55184 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dZeQx-0002aI-9l for importer@patchew.org; Mon, 24 Jul 2017 10:34:07 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:45502) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dZePO-0001gP-A5 for qemu-devel@nongnu.org; Mon, 24 Jul 2017 10:32:31 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1dZePN-00078g-HU for qemu-devel@nongnu.org; Mon, 24 Jul 2017 10:32:30 -0400 Received: from mx1.redhat.com ([209.132.183.28]:45716) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1dZePL-00075l-8V; Mon, 24 Jul 2017 10:32:27 -0400 Received: from smtp.corp.redhat.com (int-mx03.intmail.prod.int.phx2.redhat.com [10.5.11.13]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id 3C85C356DA; Mon, 24 Jul 2017 14:32:26 +0000 (UTC) Received: from noname.str.redhat.com (dhcp-192-175.str.redhat.com [10.33.192.175]) by smtp.corp.redhat.com (Postfix) with ESMTP id 714F860A9B; Mon, 24 Jul 2017 14:32:25 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mx1.redhat.com 3C85C356DA 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=kwolf@redhat.com DKIM-Filter: OpenDKIM Filter v2.11.0 mx1.redhat.com 3C85C356DA From: Kevin Wolf To: qemu-block@nongnu.org Date: Mon, 24 Jul 2017 16:32:08 +0200 Message-Id: <1500906730-26467-4-git-send-email-kwolf@redhat.com> In-Reply-To: <1500906730-26467-1-git-send-email-kwolf@redhat.com> References: <1500906730-26467-1-git-send-email-kwolf@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 (mx1.redhat.com [10.5.110.30]); Mon, 24 Jul 2017 14:32:26 +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 3/5] qcow2: Fix sector calculation in qcow2_measure() 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: kwolf@redhat.com, qemu-devel@nongnu.org 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: Eric Blake We used MAX() instead of the intended MIN() when computing how many sectors to view in the current loop iteration of qcow2_measure(), and passed in a value of INT_MAX sectors instead of our more usual limit of BDRV_REQUEST_MAX_SECTORS (the latter avoids 32-bit overflow on conversion to bytes). For small files, the bug is harmless: bdrv_get_block_status_above() clamps its *pnum answer to the BDS size, regardless of any insanely larger input request. However, for any file at least 2T in size, we can very easily end up going into an infinite loop (the maximum of 0x100000000 sectors and INT_MAX is a 64-bit quantity, which becomes 0 when assigned to int; once nb_sectors is 0, we never make progress). Signed-off-by: Eric Blake Reviewed-by: Stefan Hajnoczi Signed-off-by: Kevin Wolf --- block/qcow2.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/block/qcow2.c b/block/qcow2.c index d5790af..90efa44 100644 --- a/block/qcow2.c +++ b/block/qcow2.c @@ -3669,8 +3669,8 @@ static BlockMeasureInfo *qcow2_measure(QemuOpts *opts= , BlockDriverState *in_bs, for (sector_num =3D 0; sector_num < ssize / BDRV_SECTOR_SIZE; sector_num +=3D pnum) { - int nb_sectors =3D MAX(ssize / BDRV_SECTOR_SIZE - sector_n= um, - INT_MAX); + int nb_sectors =3D MIN(ssize / BDRV_SECTOR_SIZE - sector_n= um, + BDRV_REQUEST_MAX_SECTORS); BlockDriverState *file; int64_t ret; =20 --=20 1.8.3.1 From nobody Wed Nov 5 00:42:05 2025 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.zohomail.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 1500907162110992.1715549400386; Mon, 24 Jul 2017 07:39:22 -0700 (PDT) Received: from localhost ([::1]:55210 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dZeVw-0006km-Ew for importer@patchew.org; Mon, 24 Jul 2017 10:39:16 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:45566) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dZePT-0001m1-Qg for qemu-devel@nongnu.org; Mon, 24 Jul 2017 10:32:38 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1dZePR-0007Cl-7I for qemu-devel@nongnu.org; Mon, 24 Jul 2017 10:32:35 -0400 Received: from mx1.redhat.com ([209.132.183.28]:41802) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1dZePM-00076p-Bg; Mon, 24 Jul 2017 10:32:28 -0400 Received: from smtp.corp.redhat.com (int-mx03.intmail.prod.int.phx2.redhat.com [10.5.11.13]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id 4FC70461FE; Mon, 24 Jul 2017 14:32:27 +0000 (UTC) Received: from noname.str.redhat.com (dhcp-192-175.str.redhat.com [10.33.192.175]) by smtp.corp.redhat.com (Postfix) with ESMTP id 7EE8260609; Mon, 24 Jul 2017 14:32:26 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mx1.redhat.com 4FC70461FE Authentication-Results: ext-mx05.extmail.prod.ext.phx2.redhat.com; dmarc=none (p=none dis=none) header.from=redhat.com Authentication-Results: ext-mx05.extmail.prod.ext.phx2.redhat.com; spf=pass smtp.mailfrom=kwolf@redhat.com DKIM-Filter: OpenDKIM Filter v2.11.0 mx1.redhat.com 4FC70461FE From: Kevin Wolf To: qemu-block@nongnu.org Date: Mon, 24 Jul 2017 16:32:09 +0200 Message-Id: <1500906730-26467-5-git-send-email-kwolf@redhat.com> In-Reply-To: <1500906730-26467-1-git-send-email-kwolf@redhat.com> References: <1500906730-26467-1-git-send-email-kwolf@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 (mx1.redhat.com [10.5.110.29]); Mon, 24 Jul 2017 14:32:27 +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 4/5] block: Skip implicit nodes in query-block/blockstats 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: kwolf@redhat.com, qemu-devel@nongnu.org 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" Commits 0db832f and 6cdbceb introduced the automatic insertion of filter nodes above the top layer of mirror and commit block jobs. The assumption made there was that since libvirt doesn't do node-level management of the block layer yet, it shouldn't be affected by added nodes. This is true as far as commands issued by libvirt are concerned. It only uses BlockBackend names to address nodes, so any operations it performs still operate on the root of the tree as intended. However, the assumption breaks down when you consider query commands, which return data for the wrong node now. These commands also return information on some child nodes (bs->file and/or bs->backing), which libvirt does make use of, and which refer to the wrong nodes, too. One of the consequences is that oVirt gets wrong information about the image size and stops the VM in response as long as a mirror or commit job is running: https://bugzilla.redhat.com/show_bug.cgi?id=3D1470634 This patch fixes the problem by hiding the implicit nodes created automatically by the mirror and commit block jobs in the output of query-block and BlockBackend-based query-blockstats as long as the user doesn't indicate that they are aware of those nodes by providing a node name for them in the QMP command to start the block job. The node-based commands query-named-block-nodes and query-blockstats with query-nodes=3Dtrue still show all nodes, including implicit ones. This ensures that users that are capable of node-level management can still access the full information; users that only know BlockBackends won't use these commands. Cc: qemu-stable@nongnu.org Signed-off-by: Kevin Wolf Reviewed-by: Peter Krempa Reviewed-by: Max Reitz Tested-by: Eric Blake --- block.c | 13 ------------- block/commit.c | 3 +++ block/mirror.c | 3 +++ block/qapi.c | 33 +++++++++++++++++++++++++++------ include/block/block.h | 1 - include/block/block_int.h | 1 + qapi/block-core.json | 6 ++++-- tests/qemu-iotests/040 | 30 +++++++++++++++++++++++++++++- tests/qemu-iotests/040.out | 4 ++-- tests/qemu-iotests/041 | 38 +++++++++++++++++++++++++++++++++++++- tests/qemu-iotests/041.out | 4 ++-- 11 files changed, 108 insertions(+), 28 deletions(-) diff --git a/block.c b/block.c index 2dd9262..37e72b7 100644 --- a/block.c +++ b/block.c @@ -3973,19 +3973,6 @@ BlockDriverState *bdrv_find_backing_image(BlockDrive= rState *bs, return retval; } =20 -int bdrv_get_backing_file_depth(BlockDriverState *bs) -{ - if (!bs->drv) { - return 0; - } - - if (!bs->backing) { - return 0; - } - - return 1 + bdrv_get_backing_file_depth(bs->backing->bs); -} - void bdrv_init(void) { module_call_init(MODULE_INIT_BLOCK); diff --git a/block/commit.c b/block/commit.c index 5cc910f..c7857c3 100644 --- a/block/commit.c +++ b/block/commit.c @@ -346,6 +346,9 @@ void commit_start(const char *job_id, BlockDriverState = *bs, if (commit_top_bs =3D=3D NULL) { goto fail; } + if (!filter_node_name) { + commit_top_bs->implicit =3D true; + } commit_top_bs->total_sectors =3D top->total_sectors; bdrv_set_aio_context(commit_top_bs, bdrv_get_aio_context(top)); =20 diff --git a/block/mirror.c b/block/mirror.c index 8583b76..c9a6a3c 100644 --- a/block/mirror.c +++ b/block/mirror.c @@ -1168,6 +1168,9 @@ static void mirror_start_job(const char *job_id, Bloc= kDriverState *bs, if (mirror_top_bs =3D=3D NULL) { return; } + if (!filter_node_name) { + mirror_top_bs->implicit =3D true; + } mirror_top_bs->total_sectors =3D bs->total_sectors; bdrv_set_aio_context(mirror_top_bs, bdrv_get_aio_context(bs)); =20 diff --git a/block/qapi.c b/block/qapi.c index 95b2e2d..d2b18ee 100644 --- a/block/qapi.c +++ b/block/qapi.c @@ -64,7 +64,6 @@ BlockDeviceInfo *bdrv_block_device_info(BlockBackend *blk, info->backing_file =3D g_strdup(bs->backing_file); } =20 - info->backing_file_depth =3D bdrv_get_backing_file_depth(bs); info->detect_zeroes =3D bs->detect_zeroes; =20 if (blk && blk_get_public(blk)->throttle_state) { @@ -125,6 +124,7 @@ BlockDeviceInfo *bdrv_block_device_info(BlockBackend *b= lk, =20 bs0 =3D bs; p_image_info =3D &info->image; + info->backing_file_depth =3D 0; while (1) { Error *local_err =3D NULL; bdrv_query_image_info(bs0, p_image_info, &local_err); @@ -133,13 +133,21 @@ BlockDeviceInfo *bdrv_block_device_info(BlockBackend = *blk, qapi_free_BlockDeviceInfo(info); return NULL; } + if (bs0->drv && bs0->backing) { + info->backing_file_depth++; bs0 =3D bs0->backing->bs; (*p_image_info)->has_backing_image =3D true; p_image_info =3D &((*p_image_info)->backing_image); } else { break; } + + /* Skip automatically inserted nodes that the user isn't aware of = for + * query-block (blk !=3D NULL), but not for query-named-block-node= s */ + while (blk && bs0 && bs0->drv && bs0->implicit) { + bs0 =3D backing_bs(bs0); + } } =20 return info; @@ -324,6 +332,11 @@ static void bdrv_query_info(BlockBackend *blk, BlockIn= fo **p_info, BlockDriverState *bs =3D blk_bs(blk); char *qdev; =20 + /* Skip automatically inserted nodes that the user isn't aware of */ + while (bs && bs->drv && bs->implicit) { + bs =3D backing_bs(bs); + } + info->device =3D g_strdup(blk_name(blk)); info->type =3D g_strdup("unknown"); info->locked =3D blk_dev_is_medium_locked(blk); @@ -434,8 +447,8 @@ static void bdrv_query_blk_stats(BlockDeviceStats *ds, = BlockBackend *blk) } } =20 -static BlockStats *bdrv_query_bds_stats(const BlockDriverState *bs, - bool query_backing) +static BlockStats *bdrv_query_bds_stats(BlockDriverState *bs, + bool blk_level) { BlockStats *s =3D NULL; =20 @@ -446,6 +459,14 @@ static BlockStats *bdrv_query_bds_stats(const BlockDri= verState *bs, return s; } =20 + /* Skip automatically inserted nodes that the user isn't aware of in + * a BlockBackend-level command. Stay at the exact node for a node-lev= el + * command. */ + while (blk_level && bs->drv && bs->implicit) { + bs =3D backing_bs(bs); + assert(bs); + } + if (bdrv_get_node_name(bs)[0]) { s->has_node_name =3D true; s->node_name =3D g_strdup(bdrv_get_node_name(bs)); @@ -455,12 +476,12 @@ static BlockStats *bdrv_query_bds_stats(const BlockDr= iverState *bs, =20 if (bs->file) { s->has_parent =3D true; - s->parent =3D bdrv_query_bds_stats(bs->file->bs, query_backing); + s->parent =3D bdrv_query_bds_stats(bs->file->bs, blk_level); } =20 - if (query_backing && bs->backing) { + if (blk_level && bs->backing) { s->has_backing =3D true; - s->backing =3D bdrv_query_bds_stats(bs->backing->bs, query_backing= ); + s->backing =3D bdrv_query_bds_stats(bs->backing->bs, blk_level); } =20 return s; diff --git a/include/block/block.h b/include/block/block.h index b3e2674..34770bb 100644 --- a/include/block/block.h +++ b/include/block/block.h @@ -300,7 +300,6 @@ int coroutine_fn bdrv_co_pwrite_zeroes(BdrvChild *child= , int64_t offset, int bytes, BdrvRequestFlags flags); BlockDriverState *bdrv_find_backing_image(BlockDriverState *bs, const char *backing_file); -int bdrv_get_backing_file_depth(BlockDriverState *bs); void bdrv_refresh_filename(BlockDriverState *bs); int bdrv_truncate(BdrvChild *child, int64_t offset, PreallocMode prealloc, Error **errp); diff --git a/include/block/block_int.h b/include/block/block_int.h index 5c6b761..d4f4ea7 100644 --- a/include/block/block_int.h +++ b/include/block/block_int.h @@ -549,6 +549,7 @@ struct BlockDriverState { bool sg; /* if true, the device is a /dev/sg* */ bool probed; /* if true, format was probed rather than specified */ bool force_share; /* if true, always allow all shared permissions */ + bool implicit; /* if true, this filter node was automatically inserte= d */ =20 BlockDriver *drv; /* NULL means no media */ void *opaque; diff --git a/qapi/block-core.json b/qapi/block-core.json index ff8e2ba..006e048 100644 --- a/qapi/block-core.json +++ b/qapi/block-core.json @@ -520,7 +520,8 @@ # # Get a list of BlockInfo for all virtual block devices. # -# Returns: a list of @BlockInfo describing each virtual block device +# Returns: a list of @BlockInfo describing each virtual block device. Filt= er +# nodes that were created implicitly are skipped over. # # Since: 0.14.0 # @@ -780,7 +781,8 @@ # information, but not "backing". # If false or omitted, the behavior is as before - query all= the # device backends, recursively including their "parent" and -# "backing". (Since 2.3) +# "backing". Filter nodes that were created implicitly are +# skipped over in this mode. (Since 2.3) # # Returns: A list of @BlockStats for each virtual block devices. # diff --git a/tests/qemu-iotests/040 b/tests/qemu-iotests/040 index 9d381d9..95b7510 100755 --- a/tests/qemu-iotests/040 +++ b/tests/qemu-iotests/040 @@ -81,7 +81,7 @@ class TestSingleDrive(ImageCommitTestCase): qemu_img('create', '-f', iotests.imgfmt, '-o', 'backing_file=3D%s'= % mid_img, test_img) qemu_io('-f', 'raw', '-c', 'write -P 0xab 0 524288', backing_img) qemu_io('-f', iotests.imgfmt, '-c', 'write -P 0xef 524288 524288',= mid_img) - self.vm =3D iotests.VM().add_drive(test_img, interface=3D"none") + self.vm =3D iotests.VM().add_drive(test_img, "node-name=3Dtop,back= ing.node-name=3Dmid,backing.backing.node-name=3Dbase", interface=3D"none") self.vm.add_device("virtio-scsi-pci") self.vm.add_device("scsi-hd,id=3Dscsi0,drive=3Ddrive0") self.vm.launch() @@ -163,6 +163,34 @@ class TestSingleDrive(ImageCommitTestCase): =20 self.assert_no_active_block_jobs() =20 + # Tests that the insertion of the commit_top filter node doesn't make a + # difference to query-blockstat + def test_implicit_node(self): + if self.image_len =3D=3D 0: + return + + self.assert_no_active_block_jobs() + result =3D self.vm.qmp('block-commit', device=3D'drive0', top=3Dmi= d_img, + base=3Dbacking_img, speed=3D(self.image_len /= 4)) + self.assert_qmp(result, 'return', {}) + + result =3D self.vm.qmp('query-block') + self.assert_qmp(result, 'return[0]/inserted/file', test_img) + self.assert_qmp(result, 'return[0]/inserted/drv', iotests.imgfmt) + self.assert_qmp(result, 'return[0]/inserted/backing_file', mid_img) + self.assert_qmp(result, 'return[0]/inserted/backing_file_depth', 2) + self.assert_qmp(result, 'return[0]/inserted/image/filename', test_= img) + self.assert_qmp(result, 'return[0]/inserted/image/backing-image/fi= lename', mid_img) + self.assert_qmp(result, 'return[0]/inserted/image/backing-image/ba= cking-image/filename', backing_img) + + result =3D self.vm.qmp('query-blockstats') + self.assert_qmp(result, 'return[0]/node-name', 'top') + self.assert_qmp(result, 'return[0]/backing/node-name', 'mid') + self.assert_qmp(result, 'return[0]/backing/backing/node-name', 'ba= se') + + self.cancel_and_wait() + self.assert_no_active_block_jobs() + class TestRelativePaths(ImageCommitTestCase): image_len =3D 1 * 1024 * 1024 test_len =3D 1 * 1024 * 256 diff --git a/tests/qemu-iotests/040.out b/tests/qemu-iotests/040.out index 6d9bee1..e20a75c 100644 --- a/tests/qemu-iotests/040.out +++ b/tests/qemu-iotests/040.out @@ -1,5 +1,5 @@ -........................... +............................. ---------------------------------------------------------------------- -Ran 27 tests +Ran 29 tests =20 OK diff --git a/tests/qemu-iotests/041 b/tests/qemu-iotests/041 index 2f54986..60f09cc 100755 --- a/tests/qemu-iotests/041 +++ b/tests/qemu-iotests/041 @@ -42,7 +42,7 @@ class TestSingleDrive(iotests.QMPTestCase): def setUp(self): iotests.create_image(backing_img, self.image_len) qemu_img('create', '-f', iotests.imgfmt, '-o', 'backing_file=3D%s'= % backing_img, test_img) - self.vm =3D iotests.VM().add_drive(test_img) + self.vm =3D iotests.VM().add_drive(test_img, "node-name=3Dtop,back= ing.node-name=3Dbase") if iotests.qemu_default_machine =3D=3D 'pc': self.vm.add_drive(None, 'media=3Dcdrom', 'ide') self.vm.launch() @@ -169,6 +169,42 @@ class TestSingleDrive(iotests.QMPTestCase): self.assertTrue(iotests.compare_images(test_img, target_img), 'target image does not match source after mirrorin= g') =20 + # Tests that the insertion of the mirror_top filter node doesn't make a + # difference to query-block + def test_implicit_node(self): + self.assert_no_active_block_jobs() + + result =3D self.vm.qmp(self.qmp_cmd, device=3D'drive0', sync=3D'fu= ll', + target=3Dself.qmp_target) + self.assert_qmp(result, 'return', {}) + + result =3D self.vm.qmp('query-block') + self.assert_qmp(result, 'return[0]/inserted/file', test_img) + self.assert_qmp(result, 'return[0]/inserted/drv', iotests.imgfmt) + self.assert_qmp(result, 'return[0]/inserted/backing_file', backing= _img) + self.assert_qmp(result, 'return[0]/inserted/backing_file_depth', 1) + self.assert_qmp(result, 'return[0]/inserted/image/filename', test_= img) + self.assert_qmp(result, 'return[0]/inserted/image/backing-image/fi= lename', backing_img) + + result =3D self.vm.qmp('query-blockstats') + self.assert_qmp(result, 'return[0]/node-name', 'top') + self.assert_qmp(result, 'return[0]/backing/node-name', 'base') + + self.cancel_and_wait(force=3DTrue) + result =3D self.vm.qmp('query-block') + self.assert_qmp(result, 'return[0]/inserted/file', test_img) + self.assert_qmp(result, 'return[0]/inserted/drv', iotests.imgfmt) + self.assert_qmp(result, 'return[0]/inserted/backing_file', backing= _img) + self.assert_qmp(result, 'return[0]/inserted/backing_file_depth', 1) + self.assert_qmp(result, 'return[0]/inserted/image/filename', test_= img) + self.assert_qmp(result, 'return[0]/inserted/image/backing-image/fi= lename', backing_img) + + result =3D self.vm.qmp('query-blockstats') + self.assert_qmp(result, 'return[0]/node-name', 'top') + self.assert_qmp(result, 'return[0]/backing/node-name', 'base') + + self.vm.shutdown() + def test_medium_not_found(self): if iotests.qemu_default_machine !=3D 'pc': return diff --git a/tests/qemu-iotests/041.out b/tests/qemu-iotests/041.out index e30fd3b..c28b392 100644 --- a/tests/qemu-iotests/041.out +++ b/tests/qemu-iotests/041.out @@ -1,5 +1,5 @@ -..........................................................................= ..... +..........................................................................= ........... ---------------------------------------------------------------------- -Ran 79 tests +Ran 85 tests =20 OK --=20 1.8.3.1 From nobody Wed Nov 5 00:42:05 2025 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.zohomail.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 1500907147867919.8744352862726; Mon, 24 Jul 2017 07:39:07 -0700 (PDT) Received: from localhost ([::1]:55209 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dZeVk-0006bK-F7 for importer@patchew.org; Mon, 24 Jul 2017 10:39:04 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:45565) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dZePT-0001m0-Qf for qemu-devel@nongnu.org; Mon, 24 Jul 2017 10:32:37 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1dZePQ-0007C0-FX for qemu-devel@nongnu.org; Mon, 24 Jul 2017 10:32:35 -0400 Received: from mx1.redhat.com ([209.132.183.28]:56590) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1dZePN-000780-BS; Mon, 24 Jul 2017 10:32:29 -0400 Received: from smtp.corp.redhat.com (int-mx03.intmail.prod.int.phx2.redhat.com [10.5.11.13]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id 45B2DC01B815; Mon, 24 Jul 2017 14:32:28 +0000 (UTC) Received: from noname.str.redhat.com (dhcp-192-175.str.redhat.com [10.33.192.175]) by smtp.corp.redhat.com (Postfix) with ESMTP id 9204760609; Mon, 24 Jul 2017 14:32:27 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mx1.redhat.com 45B2DC01B815 Authentication-Results: ext-mx08.extmail.prod.ext.phx2.redhat.com; dmarc=none (p=none dis=none) header.from=redhat.com Authentication-Results: ext-mx08.extmail.prod.ext.phx2.redhat.com; spf=pass smtp.mailfrom=kwolf@redhat.com DKIM-Filter: OpenDKIM Filter v2.11.0 mx1.redhat.com 45B2DC01B815 From: Kevin Wolf To: qemu-block@nongnu.org Date: Mon, 24 Jul 2017 16:32:10 +0200 Message-Id: <1500906730-26467-6-git-send-email-kwolf@redhat.com> In-Reply-To: <1500906730-26467-1-git-send-email-kwolf@redhat.com> References: <1500906730-26467-1-git-send-email-kwolf@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 (mx1.redhat.com [10.5.110.32]); Mon, 24 Jul 2017 14:32:28 +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 5/5] qemu-iotests: Avoid unnecessary sleeps 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: kwolf@redhat.com, qemu-devel@nongnu.org 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" Test cases 030, 041 and 055 used to sleep for a second after calling block-job-pause to make sure that the block job had time to actually get into paused state. We can instead poll its status and use that one second only as a timeout. The tests also slept a second for checking that the block jobs don't make progress while being paused. Half a second is more than enough for this. These changes reduce the total time for the three tests by 25 seconds on my laptop (from 155 seconds to 130). Signed-off-by: Kevin Wolf Reviewed-by: Eric Blake --- tests/qemu-iotests/030 | 7 ++++--- tests/qemu-iotests/041 | 12 ++++-------- tests/qemu-iotests/055 | 15 +++++++++------ tests/qemu-iotests/iotests.py | 27 +++++++++++++++++++++++++++ 4 files changed, 44 insertions(+), 17 deletions(-) diff --git a/tests/qemu-iotests/030 b/tests/qemu-iotests/030 index feee861..d745cb4 100755 --- a/tests/qemu-iotests/030 +++ b/tests/qemu-iotests/030 @@ -89,18 +89,19 @@ class TestSingleDrive(iotests.QMPTestCase): result =3D self.vm.qmp('block-job-pause', device=3D'drive0') self.assert_qmp(result, 'return', {}) =20 - time.sleep(1) + self.vm.resume_drive('drive0') + self.pause_job('drive0') + result =3D self.vm.qmp('query-block-jobs') offset =3D self.dictpath(result, 'return[0]/offset') =20 - time.sleep(1) + time.sleep(0.5) result =3D self.vm.qmp('query-block-jobs') self.assert_qmp(result, 'return[0]/offset', offset) =20 result =3D self.vm.qmp('block-job-resume', device=3D'drive0') self.assert_qmp(result, 'return', {}) =20 - self.vm.resume_drive('drive0') self.wait_until_completed() =20 self.assert_no_active_block_jobs() diff --git a/tests/qemu-iotests/041 b/tests/qemu-iotests/041 index 60f09cc..4cda540 100755 --- a/tests/qemu-iotests/041 +++ b/tests/qemu-iotests/041 @@ -103,14 +103,12 @@ class TestSingleDrive(iotests.QMPTestCase): target=3Dself.qmp_target) self.assert_qmp(result, 'return', {}) =20 - result =3D self.vm.qmp('block-job-pause', device=3D'drive0') - self.assert_qmp(result, 'return', {}) + self.pause_job('drive0') =20 - time.sleep(1) result =3D self.vm.qmp('query-block-jobs') offset =3D self.dictpath(result, 'return[0]/offset') =20 - time.sleep(1) + time.sleep(0.5) result =3D self.vm.qmp('query-block-jobs') self.assert_qmp(result, 'return[0]/offset', offset) =20 @@ -896,14 +894,12 @@ class TestRepairQuorum(iotests.QMPTestCase): target=3Dquorum_repair_img, format=3Diotests.= imgfmt) self.assert_qmp(result, 'return', {}) =20 - result =3D self.vm.qmp('block-job-pause', device=3D'job0') - self.assert_qmp(result, 'return', {}) + self.pause_job('job0') =20 - time.sleep(1) result =3D self.vm.qmp('query-block-jobs') offset =3D self.dictpath(result, 'return[0]/offset') =20 - time.sleep(1) + time.sleep(0.5) result =3D self.vm.qmp('query-block-jobs') self.assert_qmp(result, 'return[0]/offset', offset) =20 diff --git a/tests/qemu-iotests/055 b/tests/qemu-iotests/055 index ba4da65..e1206ca 100755 --- a/tests/qemu-iotests/055 +++ b/tests/qemu-iotests/055 @@ -89,11 +89,12 @@ class TestSingleDrive(iotests.QMPTestCase): self.assert_qmp(result, 'return', {}) =20 self.vm.resume_drive('drive0') - time.sleep(1) + self.pause_job('drive0') + result =3D self.vm.qmp('query-block-jobs') offset =3D self.dictpath(result, 'return[0]/offset') =20 - time.sleep(1) + time.sleep(0.5) result =3D self.vm.qmp('query-block-jobs') self.assert_qmp(result, 'return[0]/offset', offset) =20 @@ -302,11 +303,12 @@ class TestSingleTransaction(iotests.QMPTestCase): self.assert_qmp(result, 'return', {}) =20 self.vm.resume_drive('drive0') - time.sleep(1) + self.pause_job('drive0') + result =3D self.vm.qmp('query-block-jobs') offset =3D self.dictpath(result, 'return[0]/offset') =20 - time.sleep(1) + time.sleep(0.5) result =3D self.vm.qmp('query-block-jobs') self.assert_qmp(result, 'return[0]/offset', offset) =20 @@ -529,11 +531,12 @@ class TestDriveCompression(iotests.QMPTestCase): self.assert_qmp(result, 'return', {}) =20 self.vm.resume_drive('drive0') - time.sleep(1) + self.pause_job('drive0') + result =3D self.vm.qmp('query-block-jobs') offset =3D self.dictpath(result, 'return[0]/offset') =20 - time.sleep(1) + time.sleep(0.5) result =3D self.vm.qmp('query-block-jobs') self.assert_qmp(result, 'return[0]/offset', offset) =20 diff --git a/tests/qemu-iotests/iotests.py b/tests/qemu-iotests/iotests.py index abcf3c1..22439c4 100644 --- a/tests/qemu-iotests/iotests.py +++ b/tests/qemu-iotests/iotests.py @@ -27,6 +27,7 @@ sys.path.append(os.path.join(os.path.dirname(__file__), '= ..', '..', 'scripts')) import qtest import struct import json +import signal =20 =20 # This will not work if arguments contain spaces but is necessary if we @@ -137,6 +138,20 @@ def log(msg, filters=3D[]): msg =3D flt(msg) print msg =20 +class Timeout: + def __init__(self, seconds, errmsg =3D "Timeout"): + self.seconds =3D seconds + self.errmsg =3D errmsg + def __enter__(self): + signal.signal(signal.SIGALRM, self.timeout) + signal.setitimer(signal.ITIMER_REAL, self.seconds) + return self + def __exit__(self, type, value, traceback): + signal.setitimer(signal.ITIMER_REAL, 0) + return False + def timeout(self, signum, frame): + raise Exception(self.errmsg) + class VM(qtest.QEMUQtestMachine): '''A QEMU VM''' =20 @@ -346,6 +361,18 @@ class QMPTestCase(unittest.TestCase): event =3D self.wait_until_completed(drive=3Ddrive) self.assert_qmp(event, 'data/type', 'mirror') =20 + def pause_job(self, job_id=3D'job0'): + result =3D self.vm.qmp('block-job-pause', device=3Djob_id) + self.assert_qmp(result, 'return', {}) + + with Timeout(1, "Timeout waiting for job to pause"): + while True: + result =3D self.vm.qmp('query-block-jobs') + for job in result['return']: + if job['device'] =3D=3D job_id and job['paused'] =3D= =3D True and job['busy'] =3D=3D False: + return job + + def notrun(reason): '''Skip this test suite''' # Each test in qemu-iotests has a number ("seq") --=20 1.8.3.1