From nobody Mon Nov 10 14:22:03 2025 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=1557324250; cv=none; d=zoho.com; s=zohoarc; b=X7Zk4oTQH+bQASTZyVKhqBYbkRmMNhjfs9rsT64cDrHfvC6qzRwAzcd1mQ0dL1+ucLKLZRJCNF2qtn1asiRf7JcRBQeCIoY/6/FIstOVONKssEH91sGDGTyNIcI2581/L9iEC1hRg1Jn/lSGHBD5zv2wH5Oe4c8KOs9XQCpAQNo= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zoho.com; s=zohoarc; t=1557324250; 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=T0CzXfLNhzHNH0+jBBOyfLkkGMRys99ApaqmXsaUNJA=; b=hKRS/0OkuNeqkWXp0djFb4KGF4nvRoqK7Lv8DJn560jy7iaivWrCHbY1yzxOLEk3pMG9PNc0mzIzlkL68O6zDQXKR3ZYiruB5k5WL/0YNb42imW9fTuR7aN+vRe7W7u2dkcTAjXNyWSF6JbN72SUo4IZrGUzMlhWCu3Z0SpTgPk= 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 1557324250195431.769179213494; Wed, 8 May 2019 07:04:10 -0700 (PDT) Received: from localhost ([127.0.0.1]:37769 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1hONB1-00081p-80 for importer@patchew.org; Wed, 08 May 2019 10:04:07 -0400 Received: from eggs.gnu.org ([209.51.188.92]:45833) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1hON8w-0006bc-Q3 for qemu-devel@nongnu.org; Wed, 08 May 2019 10:01:59 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1hON8v-00022D-OW for qemu-devel@nongnu.org; Wed, 08 May 2019 10:01:58 -0400 Received: from mx1.redhat.com ([209.132.183.28]:55394) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1hON8s-0001to-LF; Wed, 08 May 2019 10:01:54 -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 E05FD308794C; Wed, 8 May 2019 14:01:43 +0000 (UTC) Received: from localhost (ovpn-204-94.brq.redhat.com [10.40.204.94]) by smtp.corp.redhat.com (Postfix) with ESMTPS id 71D425D9C8; Wed, 8 May 2019 14:01:43 +0000 (UTC) From: Max Reitz To: qemu-block@nongnu.org Date: Wed, 8 May 2019 16:01:37 +0200 Message-Id: <20190508140139.32722-2-mreitz@redhat.com> In-Reply-To: <20190508140139.32722-1-mreitz@redhat.com> References: <20190508140139.32722-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.45]); Wed, 08 May 2019 14:01:43 +0000 (UTC) Content-Transfer-Encoding: quoted-printable X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic] X-Received-From: 209.132.183.28 Subject: [Qemu-devel] [PATCH v2 1/3] qemu-img: Allow rebase with no input base 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: Kevin Wolf , Vladimir Sementsov-Ogievskiy , qemu-devel@nongnu.org, Max Reitz Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" Content-Type: text/plain; charset="utf-8" Currently, without -u, you cannot add a backing file to an image when it currently has none: $ qemu-img rebase -b base.qcow2 foo.qcow2 qemu-img: Could not open old backing file '': The 'file' block driver requires a file name It is really simple to allow this, though (effectively by setting old_backing_size to 0), so this patch does just that. Signed-off-by: Max Reitz Reviewed-by: Eric Blake --- qemu-img.c | 61 ++++++++++++++++++++++++++++++------------------------ 1 file changed, 34 insertions(+), 27 deletions(-) diff --git a/qemu-img.c b/qemu-img.c index e6ad5978e0..e22a4fda17 100644 --- a/qemu-img.c +++ b/qemu-img.c @@ -3311,26 +3311,30 @@ static int img_rebase(int argc, char **argv) char backing_name[PATH_MAX]; QDict *options =3D NULL; =20 - if (bs->backing_format[0] !=3D '\0') { - options =3D qdict_new(); - qdict_put_str(options, "driver", bs->backing_format); - } - - if (force_share) { - if (!options) { + if (bs->backing) { + if (bs->backing_format[0] !=3D '\0') { options =3D qdict_new(); + qdict_put_str(options, "driver", bs->backing_format); } - qdict_put_bool(options, BDRV_OPT_FORCE_SHARE, true); - } - bdrv_get_backing_filename(bs, backing_name, sizeof(backing_name)); - blk_old_backing =3D blk_new_open(backing_name, NULL, - options, src_flags, &local_err); - if (!blk_old_backing) { - error_reportf_err(local_err, - "Could not open old backing file '%s': ", - backing_name); - ret =3D -1; - goto out; + + if (force_share) { + if (!options) { + options =3D qdict_new(); + } + qdict_put_bool(options, BDRV_OPT_FORCE_SHARE, true); + } + bdrv_get_backing_filename(bs, backing_name, sizeof(backing_nam= e)); + blk_old_backing =3D blk_new_open(backing_name, NULL, + options, src_flags, &local_err); + if (!blk_old_backing) { + error_reportf_err(local_err, + "Could not open old backing file '%s': ", + backing_name); + ret =3D -1; + goto out; + } + } else { + blk_old_backing =3D NULL; } =20 if (out_baseimg[0]) { @@ -3383,7 +3387,7 @@ static int img_rebase(int argc, char **argv) */ if (!unsafe) { int64_t size; - int64_t old_backing_size; + int64_t old_backing_size =3D 0; int64_t new_backing_size =3D 0; uint64_t offset; int64_t n; @@ -3399,15 +3403,18 @@ static int img_rebase(int argc, char **argv) ret =3D -1; goto out; } - old_backing_size =3D blk_getlength(blk_old_backing); - if (old_backing_size < 0) { - char backing_name[PATH_MAX]; + if (blk_old_backing) { + old_backing_size =3D blk_getlength(blk_old_backing); + if (old_backing_size < 0) { + char backing_name[PATH_MAX]; =20 - bdrv_get_backing_filename(bs, backing_name, sizeof(backing_nam= e)); - error_report("Could not get size of '%s': %s", - backing_name, strerror(-old_backing_size)); - ret =3D -1; - goto out; + bdrv_get_backing_filename(bs, backing_name, + sizeof(backing_name)); + error_report("Could not get size of '%s': %s", + backing_name, strerror(-old_backing_size)); + ret =3D -1; + goto out; + } } if (blk_new_backing) { new_backing_size =3D blk_getlength(blk_new_backing); --=20 2.20.1 From nobody Mon Nov 10 14:22:03 2025 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=1557324243; cv=none; d=zoho.com; s=zohoarc; b=foPZL7/AjLuvbCHpBcUUCUN4bvujxk0f7nA5B9lfGA3IwyWa5XhML0zJe+dG+QRpu3ewiOCkuaxaPqLsbLtJKC2bLR9+d9G0912de3a0rtxKjiFT3s0W4qqjK7y3E+b22kFQ3JflyKlmAQlmgEH4apXn9ZlZXsebyrhbcsJhaBo= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zoho.com; s=zohoarc; t=1557324243; 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=G1UZblFwvw8wiT0kmsvRSAbgexoq2OMGwQdpyaxWY+U=; b=ifPXh2ciDgwJ2rSbj567Of0v0ZkHrDSFxHaVVxfEcgcNAl7cjnFh0RABSXVJcBiS9oxow8yxZr432MkP07zUUzR+/uHcNNGo9TL1V7beMtmQjIKQISuqJOyo1fo8U/983t2kzTG6jGIg8z8bwWEhCnLQhPRJ15JzuTIZIj7Z1yc= 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 15573242435081014.1103515751181; Wed, 8 May 2019 07:04:03 -0700 (PDT) Received: from localhost ([127.0.0.1]:37767 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1hONAt-0007wY-Og for importer@patchew.org; Wed, 08 May 2019 10:03:59 -0400 Received: from eggs.gnu.org ([209.51.188.92]:45815) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1hON8w-0006Yt-4t for qemu-devel@nongnu.org; Wed, 08 May 2019 10:01:59 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1hON8v-00021m-6d for qemu-devel@nongnu.org; Wed, 08 May 2019 10:01:58 -0400 Received: from mx1.redhat.com ([209.132.183.28]:43176) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1hON8s-0001uo-NG; Wed, 08 May 2019 10:01:54 -0400 Received: from smtp.corp.redhat.com (int-mx02.intmail.prod.int.phx2.redhat.com [10.5.11.12]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id 529ECC067C19; Wed, 8 May 2019 14:01:46 +0000 (UTC) Received: from localhost (ovpn-204-94.brq.redhat.com [10.40.204.94]) by smtp.corp.redhat.com (Postfix) with ESMTPS id E024E60C74; Wed, 8 May 2019 14:01:45 +0000 (UTC) From: Max Reitz To: qemu-block@nongnu.org Date: Wed, 8 May 2019 16:01:38 +0200 Message-Id: <20190508140139.32722-3-mreitz@redhat.com> In-Reply-To: <20190508140139.32722-1-mreitz@redhat.com> References: <20190508140139.32722-1-mreitz@redhat.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.79 on 10.5.11.12 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.32]); Wed, 08 May 2019 14:01:46 +0000 (UTC) Content-Transfer-Encoding: quoted-printable X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic] X-Received-From: 209.132.183.28 Subject: [Qemu-devel] [PATCH v2 2/3] qemu-img: Use zero writes after source backing EOF 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: Kevin Wolf , Vladimir Sementsov-Ogievskiy , qemu-devel@nongnu.org, Max Reitz Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" Content-Type: text/plain; charset="utf-8" Past the end of the source backing file, we memset() buf_old to zero, so it is clearly easy to use blk_pwrite_zeroes() instead of blk_pwrite() then. Signed-off-by: Max Reitz Reviewed-by: Eric Blake --- qemu-img.c | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/qemu-img.c b/qemu-img.c index e22a4fda17..cfad922816 100644 --- a/qemu-img.c +++ b/qemu-img.c @@ -3431,6 +3431,8 @@ static int img_rebase(int argc, char **argv) } =20 for (offset =3D 0; offset < size; offset +=3D n) { + bool buf_old_is_zero =3D false; + /* How many bytes can we handle with the next read? */ n =3D MIN(IO_BUF_SIZE, size - offset); =20 @@ -3451,6 +3453,7 @@ static int img_rebase(int argc, char **argv) */ if (offset >=3D old_backing_size) { memset(buf_old, 0, n); + buf_old_is_zero =3D true; } else { if (offset + n > old_backing_size) { n =3D old_backing_size - offset; @@ -3486,8 +3489,12 @@ static int img_rebase(int argc, char **argv) if (compare_buffers(buf_old + written, buf_new + written, n - written, &pnum)) { - ret =3D blk_pwrite(blk, offset + written, - buf_old + written, pnum, 0); + if (buf_old_is_zero) { + ret =3D blk_pwrite_zeroes(blk, offset + written, p= num, 0); + } else { + ret =3D blk_pwrite(blk, offset + written, + buf_old + written, pnum, 0); + } if (ret < 0) { error_report("Error while writing to COW image: %s= ", strerror(-ret)); --=20 2.20.1 From nobody Mon Nov 10 14:22:03 2025 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=1557324385; cv=none; d=zoho.com; s=zohoarc; b=MwUrcB6aw5SZjRUUGGgeDwEUom5TcTIWaG1ncHJ94VvNpWidLgs8xak4q5ffxzZUeQpaY9Bee9EdNGVgaLQfG+T7o3sXCB9X3RpsnPyctIeVIQ8zhP3KmW5uhcoZwsp6h+rbShdPqFyjB3k3BRsGQ8d9vuRHaKDDGFsr0GB6XWY= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zoho.com; s=zohoarc; t=1557324385; 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=wF2z7/+endKpaPCCwFte2ZwO6vXIiakrCHGKc8DPTQk=; b=GVZcM/8MhLQX22DCStPHST3DIEhM3Mo2mDEyRmC/mxUPYN5oiMPSI/QalGXha2d7dZatak9GFyfpEwO9yfyJSswNjHWxWz4NAfU4ER1tOrJ+SeT1fNats6T9GXo1iskWZs3WSZ/HmifVXKxsSUzveZ2q2TRRWo8QrFm4L5gYGos= 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 1557324385092509.9586279609407; Wed, 8 May 2019 07:06:25 -0700 (PDT) Received: from localhost ([127.0.0.1]:37827 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1hONDC-0001a9-40 for importer@patchew.org; Wed, 08 May 2019 10:06:22 -0400 Received: from eggs.gnu.org ([209.51.188.92]:45866) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1hON90-0006ob-U9 for qemu-devel@nongnu.org; Wed, 08 May 2019 10:02:08 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1hON8z-00024T-Jr for qemu-devel@nongnu.org; Wed, 08 May 2019 10:02:02 -0400 Received: from mx1.redhat.com ([209.132.183.28]:51014) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1hON8s-0001vr-Ou; Wed, 08 May 2019 10:01:54 -0400 Received: from smtp.corp.redhat.com (int-mx07.intmail.prod.int.phx2.redhat.com [10.5.11.22]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id CA661806A6; Wed, 8 May 2019 14:01:48 +0000 (UTC) Received: from localhost (ovpn-204-94.brq.redhat.com [10.40.204.94]) by smtp.corp.redhat.com (Postfix) with ESMTPS id 5E6AC10027C2; Wed, 8 May 2019 14:01:48 +0000 (UTC) From: Max Reitz To: qemu-block@nongnu.org Date: Wed, 8 May 2019 16:01:39 +0200 Message-Id: <20190508140139.32722-4-mreitz@redhat.com> In-Reply-To: <20190508140139.32722-1-mreitz@redhat.com> References: <20190508140139.32722-1-mreitz@redhat.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.84 on 10.5.11.22 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.26]); Wed, 08 May 2019 14:01:48 +0000 (UTC) Content-Transfer-Encoding: quoted-printable X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic] X-Received-From: 209.132.183.28 Subject: [Qemu-devel] [PATCH v2 3/3] iotests: Add test for rebase without input base 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: Kevin Wolf , Vladimir Sementsov-Ogievskiy , qemu-devel@nongnu.org, Max Reitz Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" Content-Type: text/plain; charset="utf-8" This patch adds a test for rebasing an image that currently does not have a backing file. Signed-off-by: Max Reitz --- tests/qemu-iotests/024 | 70 ++++++++++++++++++++++++++++++++++++++ tests/qemu-iotests/024.out | 37 ++++++++++++++++++++ 2 files changed, 107 insertions(+) diff --git a/tests/qemu-iotests/024 b/tests/qemu-iotests/024 index 23298c6f59..baf8ec9f28 100755 --- a/tests/qemu-iotests/024 +++ b/tests/qemu-iotests/024 @@ -198,6 +198,76 @@ echo # $BASE_OLD and $BASE_NEW) $QEMU_IMG map "$OVERLAY" | _filter_qemu_img_map =20 +echo +echo "=3D=3D=3D Test rebase without input base =3D=3D=3D" +echo + +# Cluster allocations to be tested: +# +# Backing (new) 11 -- 11 -- 11 -- +# COW image 22 22 11 11 -- -- +# +# Expected result: +# +# COW image 22 22 11 11 00 -- +# +# (Cluster 2 might be "--" after the rebase, too, but rebase just +# compares the new backing file to the old one and disregards the +# overlay. Therefore, it will never discard overlay clusters.) + +_make_test_img $((6 * CLUSTER_SIZE)) +TEST_IMG=3D"$TEST_IMG_SAVE.base_new" _make_test_img $((6 * CLUSTER_SIZE)) + +echo + +$QEMU_IO "$TEST_IMG" \ + -c "write -P 0x22 $((0 * CLUSTER_SIZE)) $((2 * CLUSTER_SIZE))" \ + -c "write -P 0x11 $((2 * CLUSTER_SIZE)) $((2 * CLUSTER_SIZE))" \ + | _filter_qemu_io + +$QEMU_IO "$TEST_IMG.base_new" \ + -c "write -P 0x11 $((0 * CLUSTER_SIZE)) $CLUSTER_SIZE" \ + -c "write -P 0x11 $((2 * CLUSTER_SIZE)) $CLUSTER_SIZE" \ + -c "write -P 0x11 $((4 * CLUSTER_SIZE)) $CLUSTER_SIZE" \ + | _filter_qemu_io + +echo + +# This should be a no-op +$QEMU_IMG rebase -b "" "$TEST_IMG" + +# Verify the data is correct +$QEMU_IO "$TEST_IMG" \ + -c "read -P 0x22 $((0 * CLUSTER_SIZE)) $((2 * CLUSTER_SIZE))" \ + -c "read -P 0x11 $((2 * CLUSTER_SIZE)) $((2 * CLUSTER_SIZE))" \ + -c "read -P 0x00 $((4 * CLUSTER_SIZE)) $((2 * CLUSTER_SIZE))" \ + | _filter_qemu_io + +echo + +# Verify the allocation status (first four cluster should be allocated +# in TEST_IMG, clusters 4 and 5 should be unallocated (marked as zero +# clusters here because there is no backing file)) +$QEMU_IMG map --output=3Djson "$TEST_IMG" | _filter_qemu_img_map + +echo + +$QEMU_IMG rebase -b "$TEST_IMG.base_new" "$TEST_IMG" + +# Verify the data is correct +$QEMU_IO "$TEST_IMG" \ + -c "read -P 0x22 $((0 * CLUSTER_SIZE)) $((2 * CLUSTER_SIZE))" \ + -c "read -P 0x11 $((2 * CLUSTER_SIZE)) $((2 * CLUSTER_SIZE))" \ + -c "read -P 0x00 $((4 * CLUSTER_SIZE)) $((2 * CLUSTER_SIZE))" \ + | _filter_qemu_io + +echo + +# Verify the allocation status (first four cluster should be allocated +# in TEST_IMG, cluster 4 should be zero, and cluster 5 should be +# unallocated (signified by '"depth": 1')) +$QEMU_IMG map --output=3Djson "$TEST_IMG" | _filter_qemu_img_map + =20 # success, all done echo "*** done" diff --git a/tests/qemu-iotests/024.out b/tests/qemu-iotests/024.out index 024dc786b3..830abe013d 100644 --- a/tests/qemu-iotests/024.out +++ b/tests/qemu-iotests/024.out @@ -171,4 +171,41 @@ read 65536/65536 bytes at offset 196608 Offset Length File 0 0x30000 TEST_DIR/subdir/t.IMGFMT 0x30000 0x10000 TEST_DIR/subdir/t.IMGFMT.base_new + +=3D=3D=3D Test rebase without input base =3D=3D=3D + +Formatting 'TEST_DIR/t.IMGFMT', fmt=3DIMGFMT size=3D393216 +Formatting 'TEST_DIR/t.IMGFMT.base_new', fmt=3DIMGFMT size=3D393216 + +wrote 131072/131072 bytes at offset 0 +128 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +wrote 131072/131072 bytes at offset 131072 +128 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +wrote 65536/65536 bytes at offset 0 +64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +wrote 65536/65536 bytes at offset 131072 +64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +wrote 65536/65536 bytes at offset 262144 +64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) + +read 131072/131072 bytes at offset 0 +128 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +read 131072/131072 bytes at offset 131072 +128 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +read 131072/131072 bytes at offset 262144 +128 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) + +[{ "start": 0, "length": 262144, "depth": 0, "zero": false, "data": true, = "offset": OFFSET}, +{ "start": 262144, "length": 131072, "depth": 0, "zero": true, "data": fal= se}] + +read 131072/131072 bytes at offset 0 +128 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +read 131072/131072 bytes at offset 131072 +128 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +read 131072/131072 bytes at offset 262144 +128 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) + +[{ "start": 0, "length": 262144, "depth": 0, "zero": false, "data": true, = "offset": OFFSET}, +{ "start": 262144, "length": 65536, "depth": 0, "zero": true, "data": fals= e}, +{ "start": 327680, "length": 65536, "depth": 1, "zero": true, "data": fals= e}] *** done --=20 2.20.1