From nobody Thu Nov 13 14:57:00 2025 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.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; dkim=fail; spf=pass (zohomail.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 Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1581414699672463.67219034055745; Tue, 11 Feb 2020 01:51:39 -0800 (PST) Received: from localhost ([::1]:46738 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1j1SCg-0008DP-Do for importer@patchew.org; Tue, 11 Feb 2020 04:51:38 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]:46582) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1j1SAO-0004XL-VK for qemu-devel@nongnu.org; Tue, 11 Feb 2020 04:49:17 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1j1SAN-0000k6-Vz for qemu-devel@nongnu.org; Tue, 11 Feb 2020 04:49:16 -0500 Received: from us-smtp-2.mimecast.com ([205.139.110.61]:60023 helo=us-smtp-delivery-1.mimecast.com) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1j1SAN-0000jt-TA for qemu-devel@nongnu.org; Tue, 11 Feb 2020 04:49:15 -0500 Received: from mimecast-mx01.redhat.com (mimecast-mx01.redhat.com [209.132.183.4]) (Using TLS) by relay.mimecast.com with ESMTP id us-mta-134-v1K-TQ7kOZuXmgYs5J8PHg-1; Tue, 11 Feb 2020 04:49:11 -0500 Received: from smtp.corp.redhat.com (int-mx08.intmail.prod.int.phx2.redhat.com [10.5.11.23]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx01.redhat.com (Postfix) with ESMTPS id C78B21005502; Tue, 11 Feb 2020 09:49:10 +0000 (UTC) Received: from linux.fritz.box.com (ovpn-117-79.ams2.redhat.com [10.36.117.79]) by smtp.corp.redhat.com (Postfix) with ESMTP id 6E26F165D3; Tue, 11 Feb 2020 09:49:09 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1581414555; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=T5lkbv7VOEBH6UyHXpdFHxi64kb48QdEc1Ba7+bYC+s=; b=PTXf827xf6MSjRugNPXAwLRRf8Kee5vH/Fc1VhWcfcWgAaFw7CvEL/SWAF1728BoVcaRKy BQ9KBhJHlRm9RmVMoQw/3uo1J6QTc4zAfQ/FartjedlaUTz8Ri42YUpTkWjYtgOYUHt2HR oqR31HFiOuCk7XuROfnZlr9LSOqyKN0= From: Kevin Wolf To: qemu-block@nongnu.org Subject: [PATCH 1/3] qcow2: update_refcount(): Reset old_table_index after qcow2_cache_put() Date: Tue, 11 Feb 2020 10:48:58 +0100 Message-Id: <20200211094900.17315-2-kwolf@redhat.com> In-Reply-To: <20200211094900.17315-1-kwolf@redhat.com> References: <20200211094900.17315-1-kwolf@redhat.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.84 on 10.5.11.23 X-MC-Unique: v1K-TQ7kOZuXmgYs5J8PHg-1 X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com Content-Transfer-Encoding: quoted-printable X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic] X-Received-From: 205.139.110.61 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: kwolf@redhat.com, pbutsykin@virtuozzo.com, jsnow@redhat.com, qemu-devel@nongnu.org, mreitz@redhat.com Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) Content-Type: text/plain; charset="utf-8" In the case that update_refcount() frees a refcount block, it evicts it from the metadata cache. Before doing so, however, it returns the currently used refcount block to the cache because it might be the same. Returning the refcount block early means that we need to reset old_table_index so that we reload the refcount block in the next iteration if it is actually still in use. Fixes: f71c08ea8e60f035485a512fd2af8908567592f0 Signed-off-by: Kevin Wolf --- block/qcow2-refcount.c | 1 + 1 file changed, 1 insertion(+) diff --git a/block/qcow2-refcount.c b/block/qcow2-refcount.c index f67ac6b2d8..b06a9fa9ce 100644 --- a/block/qcow2-refcount.c +++ b/block/qcow2-refcount.c @@ -889,6 +889,7 @@ static int QEMU_WARN_UNUSED_RESULT update_refcount(Bloc= kDriverState *bs, offset); if (table !=3D NULL) { qcow2_cache_put(s->refcount_block_cache, &refcount_block); + old_table_index =3D -1; qcow2_cache_discard(s->refcount_block_cache, table); } =20 --=20 2.20.1 From nobody Thu Nov 13 14:57:00 2025 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.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; dkim=fail; spf=pass (zohomail.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 Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1581414630835518.8240865273308; Tue, 11 Feb 2020 01:50:30 -0800 (PST) Received: from localhost ([::1]:46702 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1j1SBY-00061v-WD for importer@patchew.org; Tue, 11 Feb 2020 04:50:29 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]:46572) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1j1SAO-0004X9-J0 for qemu-devel@nongnu.org; Tue, 11 Feb 2020 04:49:17 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1j1SAN-0000jp-K9 for qemu-devel@nongnu.org; Tue, 11 Feb 2020 04:49:16 -0500 Received: from us-smtp-delivery-1.mimecast.com ([207.211.31.120]:52237 helo=us-smtp-1.mimecast.com) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1j1SAN-0000jX-GI for qemu-devel@nongnu.org; Tue, 11 Feb 2020 04:49:15 -0500 Received: from mimecast-mx01.redhat.com (mimecast-mx01.redhat.com [209.132.183.4]) (Using TLS) by relay.mimecast.com with ESMTP id us-mta-349-WOgzxcC4OeeE-Gp2PwTuJg-1; Tue, 11 Feb 2020 04:49:13 -0500 Received: from smtp.corp.redhat.com (int-mx08.intmail.prod.int.phx2.redhat.com [10.5.11.23]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx01.redhat.com (Postfix) with ESMTPS id 737948017DF; Tue, 11 Feb 2020 09:49:12 +0000 (UTC) Received: from linux.fritz.box.com (ovpn-117-79.ams2.redhat.com [10.36.117.79]) by smtp.corp.redhat.com (Postfix) with ESMTP id 1B84B165D3; Tue, 11 Feb 2020 09:49:10 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1581414555; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=Opj16yp/AbBRXEGUZp9SBYI352Hxez9tbxd8ID6dy0o=; b=UtbZ643l5KObxvBfq7S0lu5dbsCmSc+xk6ZtevoNFgrk7Vd+SbbzNVQwldmo6Y/Vjl44sn 96fUQpVy/JbjKgApg7ttkJ01L1i7nbnvMk/F189w9mUf2croVXTVy4Ag8vzPo8wbeN6po3 0jmqVUgz4J8bNQW0kAkGPWQ4Vhlkt94= From: Kevin Wolf To: qemu-block@nongnu.org Subject: [PATCH 2/3] qcow2: Fix qcow2_alloc_cluster_abort() for external data file Date: Tue, 11 Feb 2020 10:48:59 +0100 Message-Id: <20200211094900.17315-3-kwolf@redhat.com> In-Reply-To: <20200211094900.17315-1-kwolf@redhat.com> References: <20200211094900.17315-1-kwolf@redhat.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.84 on 10.5.11.23 X-MC-Unique: WOgzxcC4OeeE-Gp2PwTuJg-1 X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com 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: 207.211.31.120 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: kwolf@redhat.com, pbutsykin@virtuozzo.com, jsnow@redhat.com, qemu-devel@nongnu.org, mreitz@redhat.com Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) Content-Type: text/plain; charset="utf-8" For external data file, cluster allocations return an offset in the data file and are not refcounted. In this case, there is nothing to do for qcow2_alloc_cluster_abort(). Freeing the same offset in the qcow2 file is wrong and causes crashes in the better case or image corruption in the worse case. Signed-off-by: Kevin Wolf --- block/qcow2-cluster.c | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/block/qcow2-cluster.c b/block/qcow2-cluster.c index 8982b7b762..dc3c270226 100644 --- a/block/qcow2-cluster.c +++ b/block/qcow2-cluster.c @@ -1015,8 +1015,11 @@ err: void qcow2_alloc_cluster_abort(BlockDriverState *bs, QCowL2Meta *m) { BDRVQcow2State *s =3D bs->opaque; - qcow2_free_clusters(bs, m->alloc_offset, m->nb_clusters << s->cluster_= bits, - QCOW2_DISCARD_NEVER); + if (!has_data_file(bs)) { + qcow2_free_clusters(bs, m->alloc_offset, + m->nb_clusters << s->cluster_bits, + QCOW2_DISCARD_NEVER); + } } =20 /* --=20 2.20.1 From nobody Thu Nov 13 14:57:00 2025 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.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; dkim=fail; spf=pass (zohomail.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 Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1581414630821761.447236639854; Tue, 11 Feb 2020 01:50:30 -0800 (PST) Received: from localhost ([::1]:46700 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1j1SBZ-00061b-4f for importer@patchew.org; Tue, 11 Feb 2020 04:50:29 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]:46635) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1j1SAS-0004d3-B9 for qemu-devel@nongnu.org; Tue, 11 Feb 2020 04:49:21 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1j1SAR-0000mW-7F for qemu-devel@nongnu.org; Tue, 11 Feb 2020 04:49:20 -0500 Received: from us-smtp-2.mimecast.com ([205.139.110.61]:53301 helo=us-smtp-delivery-1.mimecast.com) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1j1SAR-0000mG-3I for qemu-devel@nongnu.org; Tue, 11 Feb 2020 04:49:19 -0500 Received: from mimecast-mx01.redhat.com (mimecast-mx01.redhat.com [209.132.183.4]) (Using TLS) by relay.mimecast.com with ESMTP id us-mta-232-OohDAN-eMte_NIqyMjbGAQ-1; Tue, 11 Feb 2020 04:49:15 -0500 Received: from smtp.corp.redhat.com (int-mx08.intmail.prod.int.phx2.redhat.com [10.5.11.23]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx01.redhat.com (Postfix) with ESMTPS id 2059B800D48; Tue, 11 Feb 2020 09:49:14 +0000 (UTC) Received: from linux.fritz.box.com (ovpn-117-79.ams2.redhat.com [10.36.117.79]) by smtp.corp.redhat.com (Postfix) with ESMTP id BD958165D3; Tue, 11 Feb 2020 09:49:12 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1581414558; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=Fxq5/54+kseiSxGsPENC/qqBcAO/y7qe+/OvFgzHB98=; b=ABwhAb8p+YN9iZh+9g9WRj8j35aTJDyjWfUTgTEI10tEftU6SmDFGVN1lr6VzJ5NgCAPm0 3P9hhcozUKKFwLKrSVEjgiGaRSfZAanprCgWvxb4UL4y76vJes2uBJefq5eVEIygPfDsAi CXAws7ooVm31gB34lGQI2piMT5295Kw= From: Kevin Wolf To: qemu-block@nongnu.org Subject: [PATCH 3/3] iotests: Test copy offloading with external data file Date: Tue, 11 Feb 2020 10:49:00 +0100 Message-Id: <20200211094900.17315-4-kwolf@redhat.com> In-Reply-To: <20200211094900.17315-1-kwolf@redhat.com> References: <20200211094900.17315-1-kwolf@redhat.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.84 on 10.5.11.23 X-MC-Unique: OohDAN-eMte_NIqyMjbGAQ-1 X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com Content-Transfer-Encoding: quoted-printable X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic] X-Received-From: 205.139.110.61 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: kwolf@redhat.com, pbutsykin@virtuozzo.com, jsnow@redhat.com, qemu-devel@nongnu.org, mreitz@redhat.com Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) Content-Type: text/plain; charset="utf-8" This adds a test for 'qemu-img convert' with copy offloading where the target image has an external data file. If the test hosts supports it, it tests both the case where copy offloading is supported and the case where it isn't (otherwise we just test unsupported twice). More specifically, the case with unsupported copy offloading tests qcow2_alloc_cluster_abort() with external data files. Signed-off-by: Kevin Wolf --- tests/qemu-iotests/244 | 14 ++++++++++++++ tests/qemu-iotests/244.out | 6 ++++++ 2 files changed, 20 insertions(+) diff --git a/tests/qemu-iotests/244 b/tests/qemu-iotests/244 index 0d1efee6ef..2ec1815e6f 100755 --- a/tests/qemu-iotests/244 +++ b/tests/qemu-iotests/244 @@ -197,6 +197,20 @@ $QEMU_IO -c 'read -P 0x11 0 1M' -f $IMGFMT "$TEST_IMG"= | _filter_qemu_io $QEMU_IMG map --output=3Dhuman "$TEST_IMG" | _filter_testdir $QEMU_IMG map --output=3Djson "$TEST_IMG" =20 +echo +echo "=3D=3D=3D Copy offloading =3D=3D=3D" +echo + +# Make use of copy offloading if the test host can provide it +_make_test_img -o "data_file=3D$TEST_IMG.data" 64M +$QEMU_IMG convert -f $IMGFMT -O $IMGFMT -n -C "$TEST_IMG.src" "$TEST_IMG" +$QEMU_IMG compare -f $IMGFMT -F $IMGFMT "$TEST_IMG.src" "$TEST_IMG" + +# blkdebug doesn't support copy offloading, so this tests the error path +$QEMU_IMG amend -f $IMGFMT -o "data_file=3Dblkdebug::$TEST_IMG.data" "$TES= T_IMG" +$QEMU_IMG convert -f $IMGFMT -O $IMGFMT -n -C "$TEST_IMG.src" "$TEST_IMG" +$QEMU_IMG compare -f $IMGFMT -F $IMGFMT "$TEST_IMG.src" "$TEST_IMG" + # success, all done echo "*** done" rm -f $seq.full diff --git a/tests/qemu-iotests/244.out b/tests/qemu-iotests/244.out index 6a3d0067cc..e6f4dc7993 100644 --- a/tests/qemu-iotests/244.out +++ b/tests/qemu-iotests/244.out @@ -122,4 +122,10 @@ Offset Length Mapped to File 0 0x100000 0 TEST_DIR/t.qcow2.data [{ "start": 0, "length": 1048576, "depth": 0, "zero": false, "data": true,= "offset": 0}, { "start": 1048576, "length": 66060288, "depth": 0, "zero": true, "data": = false}] + +=3D=3D=3D Copy offloading =3D=3D=3D + +Formatting 'TEST_DIR/t.IMGFMT', fmt=3DIMGFMT size=3D67108864 data_file=3DT= EST_DIR/t.IMGFMT.data +Images are identical. +Images are identical. *** done --=20 2.20.1