From nobody Thu May 2 04:30:26 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.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 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail(p=none dis=none) header.from=redhat.com ARC-Seal: i=1; a=rsa-sha256; t=1569952209; cv=none; d=zoho.com; s=zohoarc; b=RmPn6U+B4u9ZQkT8j9/crUX6xykvjllZ4CXfDdl8otAvpR5+pIWHg2D79nlEMHAwK6k9EDW5MyrQa4PVk3QM3yxD7FIPzNQL2DWjvLoA3zrW6CSpTU7CbnTD3mofpYY51oKOeBwTwYeMAyckOQxNdjX1Tb7P3LSdRs7Ds50aBf0= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zoho.com; s=zohoarc; t=1569952209; h=Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To:ARC-Authentication-Results; bh=uKkx8ZrqBAHshO8FHTtpn6uLbTWbypuu6F40Lrjh7PM=; b=m893+H+f16BFJ1DXeKNbykr+7kqlHlgXsAScTKVmz4AsZ9EtsChQAQoZZmS4mQGUqV5mtPtIRAUKkTxWD2xI9FYqMQm2+jCaFgyRFGkAgAIFJHTDVQ642eMQx9rbJbisVBJUXSGuToFBmU4NFLFISU6b9WCkulRGkav4h9SXmcg= ARC-Authentication-Results: i=1; mx.zoho.com; spf=pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail header.from= (p=none dis=none) header.from= Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 156995220994867.75978654681865; Tue, 1 Oct 2019 10:50:09 -0700 (PDT) Received: from localhost ([::1]:46050 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1iFMHo-0004Ug-Q7 for importer@patchew.org; Tue, 01 Oct 2019 13:50:08 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:36458) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1iFMGM-0002sP-9f for qemu-devel@nongnu.org; Tue, 01 Oct 2019 13:48:39 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1iFMGL-0000dl-44 for qemu-devel@nongnu.org; Tue, 01 Oct 2019 13:48:38 -0400 Received: from mx1.redhat.com ([209.132.183.28]:37406) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1iFMGI-0000bg-Q6; Tue, 01 Oct 2019 13:48:34 -0400 Received: from smtp.corp.redhat.com (int-mx04.intmail.prod.int.phx2.redhat.com [10.5.11.14]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id 1326810F2E96; Tue, 1 Oct 2019 17:48:34 +0000 (UTC) Received: from localhost (unknown [10.40.205.251]) by smtp.corp.redhat.com (Postfix) with ESMTPS id 9E0B15D9C9; Tue, 1 Oct 2019 17:48:33 +0000 (UTC) From: Max Reitz To: qemu-block@nongnu.org Subject: [PATCH 1/2] block: Skip COR for inactive nodes Date: Tue, 1 Oct 2019 19:48:26 +0200 Message-Id: <20191001174827.11081-2-mreitz@redhat.com> In-Reply-To: <20191001174827.11081-1-mreitz@redhat.com> References: <20191001174827.11081-1-mreitz@redhat.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.79 on 10.5.11.14 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.6.2 (mx1.redhat.com [10.5.110.66]); Tue, 01 Oct 2019 17:48:34 +0000 (UTC) Content-Transfer-Encoding: quoted-printable X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic] [fuzzy] X-Received-From: 209.132.183.28 X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Kevin Wolf , qemu-devel@nongnu.org, Stefan Hajnoczi , Max Reitz Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" Content-Type: text/plain; charset="utf-8" We must not write data to inactive nodes, and a COR is certainly something we can simply not do without upsetting anyone. So skip COR operations on inactive nodes. Signed-off-by: Max Reitz Reviewed-by: Eric Blake --- block/io.c | 41 +++++++++++++++++++++++++++-------------- 1 file changed, 27 insertions(+), 14 deletions(-) diff --git a/block/io.c b/block/io.c index f8c3596131..4f9ee97c2b 100644 --- a/block/io.c +++ b/block/io.c @@ -1246,11 +1246,18 @@ static int coroutine_fn bdrv_co_do_copy_on_readv(Bd= rvChild *child, int max_transfer =3D MIN_NON_ZERO(bs->bl.max_transfer, BDRV_REQUEST_MAX_BYTES); unsigned int progress =3D 0; + bool skip_write; =20 if (!drv) { return -ENOMEDIUM; } =20 + /* + * Do not write anything when the BDS is inactive. That is not + * allowed, and it would not help. + */ + skip_write =3D (bs->open_flags & BDRV_O_INACTIVE); + /* FIXME We cannot require callers to have write permissions when all = they * are doing is a read request. If we did things right, write permissi= ons * would be obtained anyway, but internally by the copy-on-read code. = As @@ -1274,23 +1281,29 @@ static int coroutine_fn bdrv_co_do_copy_on_readv(Bd= rvChild *child, while (cluster_bytes) { int64_t pnum; =20 - ret =3D bdrv_is_allocated(bs, cluster_offset, - MIN(cluster_bytes, max_transfer), &pnum); - if (ret < 0) { - /* Safe to treat errors in querying allocation as if - * unallocated; we'll probably fail again soon on the - * read, but at least that will set a decent errno. - */ + if (skip_write) { + ret =3D 1; /* "already allocated", so nothing will be copied */ pnum =3D MIN(cluster_bytes, max_transfer); - } + } else { + ret =3D bdrv_is_allocated(bs, cluster_offset, + MIN(cluster_bytes, max_transfer), &pnu= m); + if (ret < 0) { + /* + * Safe to treat errors in querying allocation as if + * unallocated; we'll probably fail again soon on the + * read, but at least that will set a decent errno. + */ + pnum =3D MIN(cluster_bytes, max_transfer); + } =20 - /* Stop at EOF if the image ends in the middle of the cluster */ - if (ret =3D=3D 0 && pnum =3D=3D 0) { - assert(progress >=3D bytes); - break; - } + /* Stop at EOF if the image ends in the middle of the cluster = */ + if (ret =3D=3D 0 && pnum =3D=3D 0) { + assert(progress >=3D bytes); + break; + } =20 - assert(skip_bytes < pnum); + assert(skip_bytes < pnum); + } =20 if (ret <=3D 0) { QEMUIOVector local_qiov; --=20 2.21.0 From nobody Thu May 2 04:30:26 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.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 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail(p=none dis=none) header.from=redhat.com ARC-Seal: i=1; a=rsa-sha256; t=1569952291; cv=none; d=zoho.com; s=zohoarc; b=FTPSmHL2lDiYDg+d73QlYBhqnX7Gz1rvrgp+q/saR95gutloak1MmsM6JoXBc6B7oPDYuDqLRHELQJxoHS/hvqH0DIV/jf5bF4uvfGLhyMRzLbDn8VqlN4k72ThGht3hC0SDo2PAYuuhWGHRaFzRqJWsVSO4oceiOlH1m11FH0M= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zoho.com; s=zohoarc; t=1569952291; h=Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To:ARC-Authentication-Results; bh=El7nSL5b4tAeRTMvsUBaZHRK/OzfSeWQ7XB/rkR3/wM=; b=PklIPSbBx9IWVXnejfaSynTUITF8weFMFltMitvi5xhTyOJAOmTT1O0nhoDkXSYXGViyso/QIMQKYHShAjdukWZ6WDKjRh9RaiGpNbed6WVLL6Y6Xv7KZz1GoBtijfyCMQkO5X2BuyHptOkeypMbakhABiH2Q1iueEQPr6hEU/w= ARC-Authentication-Results: i=1; mx.zoho.com; spf=pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail header.from= (p=none dis=none) header.from= Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1569952291875412.54144410940864; Tue, 1 Oct 2019 10:51:31 -0700 (PDT) Received: from localhost ([::1]:46062 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1iFMJ8-0006Hj-T0 for importer@patchew.org; Tue, 01 Oct 2019 13:51:30 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:36485) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1iFMGQ-0002wh-8q for qemu-devel@nongnu.org; Tue, 01 Oct 2019 13:48:43 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1iFMGP-0000hO-4O for qemu-devel@nongnu.org; Tue, 01 Oct 2019 13:48:42 -0400 Received: from mx1.redhat.com ([209.132.183.28]:53420) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1iFMGM-0000eq-LK; Tue, 01 Oct 2019 13:48:38 -0400 Received: from smtp.corp.redhat.com (int-mx04.intmail.prod.int.phx2.redhat.com [10.5.11.14]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id DE44C31CD6C; Tue, 1 Oct 2019 17:48:37 +0000 (UTC) Received: from localhost (unknown [10.40.205.251]) by smtp.corp.redhat.com (Postfix) with ESMTPS id ED58C5D9C9; Tue, 1 Oct 2019 17:48:35 +0000 (UTC) From: Max Reitz To: qemu-block@nongnu.org Subject: [PATCH 2/2] iotests/262: Switch source/dest VM launch order Date: Tue, 1 Oct 2019 19:48:27 +0200 Message-Id: <20191001174827.11081-3-mreitz@redhat.com> In-Reply-To: <20191001174827.11081-1-mreitz@redhat.com> References: <20191001174827.11081-1-mreitz@redhat.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.79 on 10.5.11.14 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.29]); Tue, 01 Oct 2019 17:48:37 +0000 (UTC) Content-Transfer-Encoding: quoted-printable X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic] [fuzzy] X-Received-From: 209.132.183.28 X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Kevin Wolf , qemu-devel@nongnu.org, Stefan Hajnoczi , Max Reitz Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" Content-Type: text/plain; charset="utf-8" Launching the destination VM before the source VM gives us a regression test for HEAD^: The guest device causes a read from the disk image through guess_disk_lchs(). This will not work if the first sector (containing the partition table) is yet unallocated, we use COR, and the node is inactive. By launching the source VM before the destination, however, the COR filter on the source will allocate that area in the image shared between both VMs, thus the problem will not become apparent. Switching the launch order causes the sector to still be unallocated when guess_disk_lchs() runs on the inactive node in the destination VM, and thus we get our test case. Signed-off-by: Max Reitz Reviewed-by: Eric Blake --- tests/qemu-iotests/262 | 12 ++++++------ tests/qemu-iotests/262.out | 6 +++--- 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/tests/qemu-iotests/262 b/tests/qemu-iotests/262 index 398f63587e..0963daa806 100755 --- a/tests/qemu-iotests/262 +++ b/tests/qemu-iotests/262 @@ -54,12 +54,6 @@ with iotests.FilePath('img') as img_path, \ =20 os.mkfifo(fifo) =20 - iotests.log('Launching source VM...') - add_opts(vm_a) - vm_a.launch() - - vm_a.enable_migration_events('A') - iotests.log('Launching destination VM...') add_opts(vm_b) vm_b.add_incoming("exec: cat '%s'" % (fifo)) @@ -67,6 +61,12 @@ with iotests.FilePath('img') as img_path, \ =20 vm_b.enable_migration_events('B') =20 + iotests.log('Launching source VM...') + add_opts(vm_a) + vm_a.launch() + + vm_a.enable_migration_events('A') + iotests.log('Starting migration to B...') iotests.log(vm_a.qmp('migrate', uri=3D'exec:cat >%s' % (fifo))) with iotests.Timeout(3, 'Migration does not complete'): diff --git a/tests/qemu-iotests/262.out b/tests/qemu-iotests/262.out index 5a58e5e9f8..8e04c496c4 100644 --- a/tests/qemu-iotests/262.out +++ b/tests/qemu-iotests/262.out @@ -1,9 +1,9 @@ -Launching source VM... -Enabling migration QMP events on A... -{"return": {}} Launching destination VM... Enabling migration QMP events on B... {"return": {}} +Launching source VM... +Enabling migration QMP events on A... +{"return": {}} Starting migration to B... {"return": {}} {"data": {"status": "setup"}, "event": "MIGRATION", "timestamp": {"microse= conds": "USECS", "seconds": "SECS"}} --=20 2.21.0