From nobody Tue May 6 02:42:33 2025 Delivered-To: importer@patchew.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 ARC-Seal: i=1; a=rsa-sha256; t=1592838903; cv=none; d=zohomail.com; s=zohoarc; b=UkL7fCkutC8Xh2N2RZ5IDdQ3hWzSd92j6eAZrJSzvxM9upGL3x/Ee/F7sQd/ShxMmFmTXgflOPlljIepNYZ8XjdO8PDwiB7dcG/rAyN/ZjuClEEe7W9gVcGO6JUeqVMerHCBz0IdnlLsZ95wj42v4tNn4tAcU9PsiYSa1fGrDmA= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1592838903; h=Content-Type: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; bh=/QLjwJwWyXwpUrYwWof8lsHAdKQS5LjJPWzPxasJveQ=; b=JMJ+Mq67YBdV+PDyMbcZsTfX6alrSBwRtpZglb/7k77/4HhifwHnQjb7GO5v2BlDiWo7QFzCsd6Ow/YsA2Axol8qrb4GTq/pzE3sIlhdnjufTcUs9kZzBIhwoCJm8qQIxTtwMEclXgifZVe4pjdHMmS+TM8R11/m9aR02vG92Ng= ARC-Authentication-Results: i=1; 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 header.from=<mreitz@redhat.com> (p=none dis=none) header.from=<mreitz@redhat.com> Return-Path: <qemu-devel-bounces+importer=patchew.org@nongnu.org> Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1592838903071805.7608028386857; Mon, 22 Jun 2020 08:15:03 -0700 (PDT) Received: from localhost ([::1]:32822 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from <qemu-devel-bounces+importer=patchew.org@nongnu.org>) id 1jnOA1-0006DJ-L0 for importer@patchew.org; Mon, 22 Jun 2020 11:15:01 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:50648) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from <mreitz@redhat.com>) id 1jnO6Y-0008G4-46 for qemu-devel@nongnu.org; Mon, 22 Jun 2020 11:11:26 -0400 Received: from us-smtp-1.mimecast.com ([207.211.31.81]:52912 helo=us-smtp-delivery-1.mimecast.com) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_CBC_SHA1:256) (Exim 4.90_1) (envelope-from <mreitz@redhat.com>) id 1jnO6W-0005yN-41 for qemu-devel@nongnu.org; Mon, 22 Jun 2020 11:11:25 -0400 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-345-54PMwGNTN72uyxT9ghqoPg-1; Mon, 22 Jun 2020 11:11:18 -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 mimecast-mx01.redhat.com (Postfix) with ESMTPS id 58C211005512; Mon, 22 Jun 2020 15:11:17 +0000 (UTC) Received: from localhost (ovpn-114-85.ams2.redhat.com [10.36.114.85]) by smtp.corp.redhat.com (Postfix) with ESMTPS id BE31210013D7; Mon, 22 Jun 2020 15:11:16 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1592838683; 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=/QLjwJwWyXwpUrYwWof8lsHAdKQS5LjJPWzPxasJveQ=; b=KvvC/37EOo0WTjMfp/z0HOuDOoySBLflCE8PY0BzrDmQJognXWRW4HXTgpMpZIifvcf4Mb dLTEuamkWPvfCJOJh5qcyx9OzGSrPT7CMjKaqiZyfDtRnb4ldtxItcf1cDnDPg/BkCtcQF T0ZvESXG7dge08PwjMWLNXZiS5e/Tcs= X-MC-Unique: 54PMwGNTN72uyxT9ghqoPg-1 From: Max Reitz <mreitz@redhat.com> To: qemu-block@nongnu.org Subject: [PULL 07/18] block/amend: separate amend and create options for qemu-img Date: Mon, 22 Jun 2020 17:10:48 +0200 Message-Id: <20200622151059.921191-8-mreitz@redhat.com> In-Reply-To: <20200622151059.921191-1-mreitz@redhat.com> References: <20200622151059.921191-1-mreitz@redhat.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.84 on 10.5.11.22 X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable 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; Received-SPF: pass client-ip=207.211.31.81; envelope-from=mreitz@redhat.com; helo=us-smtp-delivery-1.mimecast.com X-detected-operating-system: by eggs.gnu.org: First seen = 2020/06/22 02:57:26 X-ACL-Warn: Detected OS = Linux 2.2.x-3.x [generic] [fuzzy] X-Spam_score_int: -30 X-Spam_score: -3.1 X-Spam_bar: --- X-Spam_report: (-3.1 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-1, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H3=-0.01, RCVD_IN_MSPIKE_WL=-0.01, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: <qemu-devel.nongnu.org> List-Unsubscribe: <https://lists.nongnu.org/mailman/options/qemu-devel>, <mailto:qemu-devel-request@nongnu.org?subject=unsubscribe> List-Archive: <https://lists.nongnu.org/archive/html/qemu-devel> List-Post: <mailto:qemu-devel@nongnu.org> List-Help: <mailto:qemu-devel-request@nongnu.org?subject=help> List-Subscribe: <https://lists.nongnu.org/mailman/listinfo/qemu-devel>, <mailto:qemu-devel-request@nongnu.org?subject=subscribe> Cc: Kevin Wolf <kwolf@redhat.com>, Peter Maydell <peter.maydell@linaro.org>, qemu-devel@nongnu.org, Max Reitz <mreitz@redhat.com> Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" <qemu-devel-bounces+importer=patchew.org@nongnu.org> X-ZohoMail-DKIM: fail (Header signature does not verify) From: Maxim Levitsky <mlevitsk@redhat.com> Some options are only useful for creation (or hard to be amended, like cluster size for qcow2), while some other options are only useful for amend, like upcoming keyslot management options for luks Since currently only qcow2 supports amend, move all its options to a common macro and then include it in each action option list. In future it might be useful to remove some options which are not supported anyway from amend list, which currently cause an error message if amended. Signed-off-by: Maxim Levitsky <mlevitsk@redhat.com> Reviewed-by: Daniel P. Berrang=C3=A9 <berrange@redhat.com> Reviewed-by: Max Reitz <mreitz@redhat.com> Message-Id: <20200608094030.670121-5-mlevitsk@redhat.com> Signed-off-by: Max Reitz <mreitz@redhat.com> --- include/block/block_int.h | 4 + block/qcow2.c | 173 +++++++++++++++++++++----------------- qemu-img.c | 18 ++-- 3 files changed, 107 insertions(+), 88 deletions(-) diff --git a/include/block/block_int.h b/include/block/block_int.h index 066b9eaa40..ed335519cc 100644 --- a/include/block/block_int.h +++ b/include/block/block_int.h @@ -420,6 +420,10 @@ struct BlockDriver { =20 /* List of options for creating images, terminated by name =3D=3D NULL= */ QemuOptsList *create_opts; + + /* List of options for image amend */ + QemuOptsList *amend_opts; + /* * If this driver supports reopening images this contains a * NULL-terminated list of the runtime options that can be diff --git a/block/qcow2.c b/block/qcow2.c index 2ab0c382f7..fcfd90f2e2 100644 --- a/block/qcow2.c +++ b/block/qcow2.c @@ -5649,89 +5649,103 @@ void qcow2_signal_corruption(BlockDriverState *bs,= bool fatal, int64_t offset, s->signaled_corruption =3D true; } =20 +#define QCOW_COMMON_OPTIONS \ + { \ + .name =3D BLOCK_OPT_SIZE, \ + .type =3D QEMU_OPT_SIZE, \ + .help =3D "Virtual disk size" \ + }, \ + { \ + .name =3D BLOCK_OPT_COMPAT_LEVEL, \ + .type =3D QEMU_OPT_STRING, \ + .help =3D "Compatibility level (v2 [0.10] or v3 [1.1])" \ + }, \ + { \ + .name =3D BLOCK_OPT_BACKING_FILE, \ + .type =3D QEMU_OPT_STRING, \ + .help =3D "File name of a base image" \ + }, \ + { \ + .name =3D BLOCK_OPT_BACKING_FMT, \ + .type =3D QEMU_OPT_STRING, \ + .help =3D "Image format of the base image" \ + }, \ + { \ + .name =3D BLOCK_OPT_DATA_FILE, \ + .type =3D QEMU_OPT_STRING, \ + .help =3D "File name of an external data file" \ + }, \ + { \ + .name =3D BLOCK_OPT_DATA_FILE_RAW, \ + .type =3D QEMU_OPT_BOOL, \ + .help =3D "The external data file must stay valid " \ + "as a raw image" \ + }, \ + { \ + .name =3D BLOCK_OPT_ENCRYPT, \ + .type =3D QEMU_OPT_BOOL, \ + .help =3D "Encrypt the image with format 'aes'. (Deprecated " \ + "in favor of " BLOCK_OPT_ENCRYPT_FORMAT "=3Daes)", \ + }, \ + { \ + .name =3D BLOCK_OPT_ENCRYPT_FORMAT, \ + .type =3D QEMU_OPT_STRING, \ + .help =3D "Encrypt the image, format choices: 'aes', 'luks'", \ + }, \ + BLOCK_CRYPTO_OPT_DEF_KEY_SECRET("encrypt.", \ + "ID of secret providing qcow AES key or LUKS passphrase"), \ + BLOCK_CRYPTO_OPT_DEF_LUKS_CIPHER_ALG("encrypt."), \ + BLOCK_CRYPTO_OPT_DEF_LUKS_CIPHER_MODE("encrypt."), \ + BLOCK_CRYPTO_OPT_DEF_LUKS_IVGEN_ALG("encrypt."), \ + BLOCK_CRYPTO_OPT_DEF_LUKS_IVGEN_HASH_ALG("encrypt."), \ + BLOCK_CRYPTO_OPT_DEF_LUKS_HASH_ALG("encrypt."), \ + BLOCK_CRYPTO_OPT_DEF_LUKS_ITER_TIME("encrypt."), \ + { \ + .name =3D BLOCK_OPT_CLUSTER_SIZE, \ + .type =3D QEMU_OPT_SIZE, \ + .help =3D "qcow2 cluster size", \ + .def_value_str =3D stringify(DEFAULT_CLUSTER_SIZE) \ + }, \ + { \ + .name =3D BLOCK_OPT_PREALLOC, \ + .type =3D QEMU_OPT_STRING, \ + .help =3D "Preallocation mode (allowed values: off, " \ + "metadata, falloc, full)" \ + }, \ + { \ + .name =3D BLOCK_OPT_LAZY_REFCOUNTS, \ + .type =3D QEMU_OPT_BOOL, \ + .help =3D "Postpone refcount updates", \ + .def_value_str =3D "off" \ + }, \ + { \ + .name =3D BLOCK_OPT_REFCOUNT_BITS, \ + .type =3D QEMU_OPT_NUMBER, \ + .help =3D "Width of a reference count entry in bits", \ + .def_value_str =3D "16" \ + }, \ + { \ + .name =3D BLOCK_OPT_COMPRESSION_TYPE, \ + .type =3D QEMU_OPT_STRING, \ + .help =3D "Compression method used for image cluster " \ + "compression", \ + .def_value_str =3D "zlib" \ + } + static QemuOptsList qcow2_create_opts =3D { .name =3D "qcow2-create-opts", .head =3D QTAILQ_HEAD_INITIALIZER(qcow2_create_opts.head), .desc =3D { - { - .name =3D BLOCK_OPT_SIZE, - .type =3D QEMU_OPT_SIZE, - .help =3D "Virtual disk size" - }, - { - .name =3D BLOCK_OPT_COMPAT_LEVEL, - .type =3D QEMU_OPT_STRING, - .help =3D "Compatibility level (v2 [0.10] or v3 [1.1])" - }, - { - .name =3D BLOCK_OPT_BACKING_FILE, - .type =3D QEMU_OPT_STRING, - .help =3D "File name of a base image" - }, - { - .name =3D BLOCK_OPT_BACKING_FMT, - .type =3D QEMU_OPT_STRING, - .help =3D "Image format of the base image" - }, - { - .name =3D BLOCK_OPT_DATA_FILE, - .type =3D QEMU_OPT_STRING, - .help =3D "File name of an external data file" - }, - { - .name =3D BLOCK_OPT_DATA_FILE_RAW, - .type =3D QEMU_OPT_BOOL, - .help =3D "The external data file must stay valid as a raw ima= ge" - }, - { - .name =3D BLOCK_OPT_ENCRYPT, - .type =3D QEMU_OPT_BOOL, - .help =3D "Encrypt the image with format 'aes'. (Deprecated " - "in favor of " BLOCK_OPT_ENCRYPT_FORMAT "=3Daes)", - }, - { - .name =3D BLOCK_OPT_ENCRYPT_FORMAT, - .type =3D QEMU_OPT_STRING, - .help =3D "Encrypt the image, format choices: 'aes', 'luks'", - }, - BLOCK_CRYPTO_OPT_DEF_KEY_SECRET("encrypt.", - "ID of secret providing qcow AES key or LUKS passphrase"), - BLOCK_CRYPTO_OPT_DEF_LUKS_CIPHER_ALG("encrypt."), - BLOCK_CRYPTO_OPT_DEF_LUKS_CIPHER_MODE("encrypt."), - BLOCK_CRYPTO_OPT_DEF_LUKS_IVGEN_ALG("encrypt."), - BLOCK_CRYPTO_OPT_DEF_LUKS_IVGEN_HASH_ALG("encrypt."), - BLOCK_CRYPTO_OPT_DEF_LUKS_HASH_ALG("encrypt."), - BLOCK_CRYPTO_OPT_DEF_LUKS_ITER_TIME("encrypt."), - { - .name =3D BLOCK_OPT_CLUSTER_SIZE, - .type =3D QEMU_OPT_SIZE, - .help =3D "qcow2 cluster size", - .def_value_str =3D stringify(DEFAULT_CLUSTER_SIZE) - }, - { - .name =3D BLOCK_OPT_PREALLOC, - .type =3D QEMU_OPT_STRING, - .help =3D "Preallocation mode (allowed values: off, metadata, " - "falloc, full)" - }, - { - .name =3D BLOCK_OPT_LAZY_REFCOUNTS, - .type =3D QEMU_OPT_BOOL, - .help =3D "Postpone refcount updates", - .def_value_str =3D "off" - }, - { - .name =3D BLOCK_OPT_REFCOUNT_BITS, - .type =3D QEMU_OPT_NUMBER, - .help =3D "Width of a reference count entry in bits", - .def_value_str =3D "16" - }, - { - .name =3D BLOCK_OPT_COMPRESSION_TYPE, - .type =3D QEMU_OPT_STRING, - .help =3D "Compression method used for image cluster compressi= on", - .def_value_str =3D "zlib" - }, + QCOW_COMMON_OPTIONS, + { /* end of list */ } + } +}; + +static QemuOptsList qcow2_amend_opts =3D { + .name =3D "qcow2-amend-opts", + .head =3D QTAILQ_HEAD_INITIALIZER(qcow2_amend_opts.head), + .desc =3D { + QCOW_COMMON_OPTIONS, { /* end of list */ } } }; @@ -5792,6 +5806,7 @@ BlockDriver bdrv_qcow2 =3D { .bdrv_inactivate =3D qcow2_inactivate, =20 .create_opts =3D &qcow2_create_opts, + .amend_opts =3D &qcow2_amend_opts, .strong_runtime_opts =3D qcow2_strong_runtime_opts, .mutable_opts =3D mutable_opts, .bdrv_co_check =3D qcow2_co_check, diff --git a/qemu-img.c b/qemu-img.c index 10d81f09db..0c4541b017 100644 --- a/qemu-img.c +++ b/qemu-img.c @@ -4077,11 +4077,11 @@ static int print_amend_option_help(const char *form= at) return 1; } =20 - /* Every driver supporting amendment must have create_opts */ - assert(drv->create_opts); + /* Every driver supporting amendment must have amend_opts */ + assert(drv->amend_opts); =20 printf("Creation options for '%s':\n", format); - qemu_opts_print_help(drv->create_opts, false); + qemu_opts_print_help(drv->amend_opts, false); printf("\nNote that not all of these options may be amendable.\n"); return 0; } @@ -4091,7 +4091,7 @@ static int img_amend(int argc, char **argv) Error *err =3D NULL; int c, ret =3D 0; char *options =3D NULL; - QemuOptsList *create_opts =3D NULL; + QemuOptsList *amend_opts =3D NULL; QemuOpts *opts =3D NULL; const char *fmt =3D NULL, *filename, *cache; int flags; @@ -4222,11 +4222,11 @@ static int img_amend(int argc, char **argv) goto out; } =20 - /* Every driver supporting amendment must have create_opts */ - assert(bs->drv->create_opts); + /* Every driver supporting amendment must have amend_opts */ + assert(bs->drv->amend_opts); =20 - create_opts =3D qemu_opts_append(create_opts, bs->drv->create_opts); - opts =3D qemu_opts_create(create_opts, NULL, 0, &error_abort); + amend_opts =3D qemu_opts_append(amend_opts, bs->drv->amend_opts); + opts =3D qemu_opts_create(amend_opts, NULL, 0, &error_abort); qemu_opts_do_parse(opts, options, NULL, &err); if (err) { error_report_err(err); @@ -4249,7 +4249,7 @@ out: out_no_progress: blk_unref(blk); qemu_opts_del(opts); - qemu_opts_free(create_opts); + qemu_opts_free(amend_opts); g_free(options); =20 if (ret) { --=20 2.26.2