From nobody Mon Nov 10 15:59:26 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