From nobody Mon Feb 9 03:29:20 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; 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=pass(p=none dis=none) header.from=redhat.com ARC-Seal: i=1; a=rsa-sha256; t=1655742602; cv=none; d=zohomail.com; s=zohoarc; b=liCmJTkFgObm9RjTDVo4+BU5tThQjRn0rD39pDveACWeImXMRE9cv0K7RiEjbGbplVzyHcB0Q5Njarv4RC5iP4AUTPj/SRp/IY01OXwrALrQ+GBoCFbHbklKrGkLB+IDIAM3XmfK7b+iLP64wXJpFUyvP6z5IRbrr7hXr0DMEwM= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1655742602; 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=QBl8D55J3wkL4vzH5q+CBhlJZXBKayii7nNAPVHdt3o=; b=REYidHoz8Ha32qBidlBtWhOGWkDYVbC8TYpWmyT4NikJ/1uqsFrcysVTwtyi4pObiaWZ3vQC9Qwig+gNFQZyqKhKcKgQXZ+HtPAJing1R4ZdQPou45mUCUSlD83cLRLbfUTU1dn/325S3d+7+Z0QEDx9wWeXUYAaZpdwMvXhmgw= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; 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=pass header.from= (p=none dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1655742602466503.7383758703236; Mon, 20 Jun 2022 09:30:02 -0700 (PDT) Received: from localhost ([::1]:41370 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1o3KHo-0001fQ-UZ for importer@patchew.org; Mon, 20 Jun 2022 12:30:01 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:52610) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1o3KFH-0005ir-PN for qemu-devel@nongnu.org; Mon, 20 Jun 2022 12:27:24 -0400 Received: from us-smtp-delivery-124.mimecast.com ([170.10.133.124]:44093) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1o3KFD-0005KL-PE for qemu-devel@nongnu.org; Mon, 20 Jun 2022 12:27:21 -0400 Received: from mimecast-mx02.redhat.com (mimecast-mx02.redhat.com [66.187.233.88]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id us-mta-258-meNQnjIlP_SAzpjTFyidqA-1; Mon, 20 Jun 2022 12:27:14 -0400 Received: from smtp.corp.redhat.com (int-mx01.intmail.prod.int.rdu2.redhat.com [10.11.54.1]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx02.redhat.com (Postfix) with ESMTPS id 2422585A580; Mon, 20 Jun 2022 16:27:14 +0000 (UTC) Received: from localhost (unknown [10.39.193.67]) by smtp.corp.redhat.com (Postfix) with ESMTPS id B40D640466B2; Mon, 20 Jun 2022 16:27:13 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1655742437; 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=QBl8D55J3wkL4vzH5q+CBhlJZXBKayii7nNAPVHdt3o=; b=RhouIMERMo8hilLELLuaFo1X9wMrVcHcpTyFQ4l+ibBzDcnQ9nGQbNdQaVHZ+BtyGhr0lk FuyQK9M0ORQpp9zNhLqnx1HvDSRJ5xZ6jYFcd1SomO3Mmc5DpVQe8R2xxNlh2XU4vw7fws ngP5qwG9t1cJSuHGaxbIp7QS1YcGffs= X-MC-Unique: meNQnjIlP_SAzpjTFyidqA-1 From: Hanna Reitz To: qemu-block@nongnu.org Cc: qemu-devel@nongnu.org, Hanna Reitz , Kevin Wolf , Eric Blake , Markus Armbruster Subject: [PATCH v2 05/12] qemu-img: Use BlockNodeInfo Date: Mon, 20 Jun 2022 18:26:57 +0200 Message-Id: <20220620162704.80987-6-hreitz@redhat.com> In-Reply-To: <20220620162704.80987-1-hreitz@redhat.com> References: <20220620162704.80987-1-hreitz@redhat.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Scanned-By: MIMEDefang 2.84 on 10.11.54.1 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=170.10.133.124; envelope-from=hreitz@redhat.com; helo=us-smtp-delivery-124.mimecast.com X-Spam_score_int: -28 X-Spam_score: -2.9 X-Spam_bar: -- X-Spam_report: (-2.9 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-0.082, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_LOW=-0.7, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, T_SCC_BODY_TEXT_LINE=-0.01 autolearn=unavailable autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @redhat.com) X-ZM-MESSAGEID: 1655742604593100001 Content-Type: text/plain; charset="utf-8" qemu-img info never uses ImageInfo's backing-image field, because it opens the backing chain one by one with BDRV_O_NO_BACKING, and prints all backing chain nodes' information consecutively. Use BlockNodeInfo to make it clear that we only print information about a single node, and that we are not using the backing-image field. Notably, bdrv_image_info_dump() does not evaluate the backing-image field, so we can easily make it take a BlockNodeInfo pointer (and consequentially rename it to bdrv_node_info_dump()). It makes more sense this way, because again, the interface now makes it syntactically clear that backing-image is ignored by this function. Signed-off-by: Hanna Reitz --- qapi/block-core.json | 4 +-- include/block/qapi.h | 2 +- block/monitor/block-hmp-cmds.c | 2 +- block/qapi.c | 2 +- qemu-img.c | 48 +++++++++++++++++----------------- 5 files changed, 29 insertions(+), 29 deletions(-) diff --git a/qapi/block-core.json b/qapi/block-core.json index 8c06deacdf..d5d1c8ff15 100644 --- a/qapi/block-core.json +++ b/qapi/block-core.json @@ -5680,9 +5680,9 @@ ## # @DummyBlockCoreForceArrays: # -# Not used by QMP; hack to let us use ImageInfoList internally +# Not used by QMP; hack to let us use BlockNodeInfoList internally # # Since: 7.1 ## { 'struct': 'DummyBlockCoreForceArrays', - 'data': { 'unused-image-info': ['ImageInfo'] } } + 'data': { 'unused-block-node-info': ['BlockNodeInfo'] } } diff --git a/include/block/qapi.h b/include/block/qapi.h index c7de4e3fa9..22198dcd0c 100644 --- a/include/block/qapi.h +++ b/include/block/qapi.h @@ -45,5 +45,5 @@ void bdrv_query_image_info(BlockDriverState *bs, void bdrv_snapshot_dump(QEMUSnapshotInfo *sn); void bdrv_image_info_specific_dump(ImageInfoSpecific *info_spec, const char *prefix); -void bdrv_image_info_dump(ImageInfo *info); +void bdrv_node_info_dump(BlockNodeInfo *info); #endif diff --git a/block/monitor/block-hmp-cmds.c b/block/monitor/block-hmp-cmds.c index bfb3c043a0..d286f2d1c5 100644 --- a/block/monitor/block-hmp-cmds.c +++ b/block/monitor/block-hmp-cmds.c @@ -734,7 +734,7 @@ static void print_block_info(Monitor *mon, BlockInfo *i= nfo, monitor_printf(mon, "\nImages:\n"); image_info =3D inserted->image; while (1) { - bdrv_image_info_dump(image_info); + bdrv_node_info_dump(qapi_ImageInfo_base(image_info)); if (image_info->has_backing_image) { image_info =3D image_info->backing_image; } else { diff --git a/block/qapi.c b/block/qapi.c index e5022b4481..ad88bf9b38 100644 --- a/block/qapi.c +++ b/block/qapi.c @@ -865,7 +865,7 @@ void bdrv_image_info_specific_dump(ImageInfoSpecific *i= nfo_spec, visit_free(v); } =20 -void bdrv_image_info_dump(ImageInfo *info) +void bdrv_node_info_dump(BlockNodeInfo *info) { char *size_buf, *dsize_buf; if (!info->has_actual_size) { diff --git a/qemu-img.c b/qemu-img.c index 4cf4d2423d..3b1f950c85 100644 --- a/qemu-img.c +++ b/qemu-img.c @@ -2800,13 +2800,13 @@ static void dump_snapshots(BlockDriverState *bs) g_free(sn_tab); } =20 -static void dump_json_image_info_list(ImageInfoList *list) +static void dump_json_block_node_info_list(BlockNodeInfoList *list) { GString *str; QObject *obj; Visitor *v =3D qobject_output_visitor_new(&obj); =20 - visit_type_ImageInfoList(v, NULL, &list, &error_abort); + visit_type_BlockNodeInfoList(v, NULL, &list, &error_abort); visit_complete(v, &obj); str =3D qobject_to_json_pretty(obj, true); assert(str !=3D NULL); @@ -2816,13 +2816,13 @@ static void dump_json_image_info_list(ImageInfoList= *list) g_string_free(str, true); } =20 -static void dump_json_image_info(ImageInfo *info) +static void dump_json_block_node_info(BlockNodeInfo *info) { GString *str; QObject *obj; Visitor *v =3D qobject_output_visitor_new(&obj); =20 - visit_type_ImageInfo(v, NULL, &info, &error_abort); + visit_type_BlockNodeInfo(v, NULL, &info, &error_abort); visit_complete(v, &obj); str =3D qobject_to_json_pretty(obj, true); assert(str !=3D NULL); @@ -2832,9 +2832,9 @@ static void dump_json_image_info(ImageInfo *info) g_string_free(str, true); } =20 -static void dump_human_image_info_list(ImageInfoList *list) +static void dump_human_image_info_list(BlockNodeInfoList *list) { - ImageInfoList *elem; + BlockNodeInfoList *elem; bool delim =3D false; =20 for (elem =3D list; elem; elem =3D elem->next) { @@ -2843,7 +2843,7 @@ static void dump_human_image_info_list(ImageInfoList = *list) } delim =3D true; =20 - bdrv_image_info_dump(elem->value); + bdrv_node_info_dump(elem->value); } } =20 @@ -2853,24 +2853,24 @@ static gboolean str_equal_func(gconstpointer a, gco= nstpointer b) } =20 /** - * Open an image file chain and return an ImageInfoList + * Open an image file chain and return an BlockNodeInfoList * * @filename: topmost image filename * @fmt: topmost image format (may be NULL to autodetect) * @chain: true - enumerate entire backing file chain * false - only topmost image file * - * Returns a list of ImageInfo objects or NULL if there was an error openi= ng an - * image file. If there was an error a message will have been printed to - * stderr. + * Returns a list of BlockNodeInfo objects or NULL if there was an error + * opening an image file. If there was an error a message will have been + * printed to stderr. */ -static ImageInfoList *collect_image_info_list(bool image_opts, - const char *filename, - const char *fmt, - bool chain, bool force_share) +static BlockNodeInfoList *collect_image_info_list(bool image_opts, + const char *filename, + const char *fmt, + bool chain, bool force_s= hare) { - ImageInfoList *head =3D NULL; - ImageInfoList **tail =3D &head; + BlockNodeInfoList *head =3D NULL; + BlockNodeInfoList **tail =3D &head; GHashTable *filenames; Error *err =3D NULL; =20 @@ -2879,7 +2879,7 @@ static ImageInfoList *collect_image_info_list(bool im= age_opts, while (filename) { BlockBackend *blk; BlockDriverState *bs; - ImageInfo *info; + BlockNodeInfo *info; =20 if (g_hash_table_lookup_extended(filenames, filename, NULL, NULL))= { error_report("Backing file '%s' creates an infinite loop.", @@ -2896,7 +2896,7 @@ static ImageInfoList *collect_image_info_list(bool im= age_opts, } bs =3D blk_bs(blk); =20 - bdrv_query_image_info(bs, &info, &err); + bdrv_query_block_node_info(bs, &info, &err); if (err) { error_report_err(err); blk_unref(blk); @@ -2929,7 +2929,7 @@ static ImageInfoList *collect_image_info_list(bool im= age_opts, return head; =20 err: - qapi_free_ImageInfoList(head); + qapi_free_BlockNodeInfoList(head); g_hash_table_destroy(filenames); return NULL; } @@ -2940,7 +2940,7 @@ static int img_info(int argc, char **argv) OutputFormat output_format =3D OFORMAT_HUMAN; bool chain =3D false; const char *filename, *fmt, *output; - ImageInfoList *list; + BlockNodeInfoList *list; bool image_opts =3D false; bool force_share =3D false; =20 @@ -3019,14 +3019,14 @@ static int img_info(int argc, char **argv) break; case OFORMAT_JSON: if (chain) { - dump_json_image_info_list(list); + dump_json_block_node_info_list(list); } else { - dump_json_image_info(list->value); + dump_json_block_node_info(list->value); } break; } =20 - qapi_free_ImageInfoList(list); + qapi_free_BlockNodeInfoList(list); return 0; } =20 --=20 2.35.3