From nobody Fri Nov 7 19:59:54 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; dkim=fail; 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=yandex-team.ru Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1548687303645160.867529546088; Mon, 28 Jan 2019 06:55:03 -0800 (PST) Received: from localhost ([127.0.0.1]:33005 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1go83u-0008Kx-4D for importer@patchew.org; Mon, 28 Jan 2019 09:38:58 -0500 Received: from eggs.gnu.org ([209.51.188.92]:43945) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1go7ta-0000TQ-1Z for qemu-devel@nongnu.org; Mon, 28 Jan 2019 09:28:18 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1go7tZ-0006JT-BN for qemu-devel@nongnu.org; Mon, 28 Jan 2019 09:28:18 -0500 Received: from forwardcorp1o.cmail.yandex.net ([2a02:6b8:0:1a72::290]:52033) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1go7tX-00067G-6A; Mon, 28 Jan 2019 09:28:15 -0500 Received: from mxbackcorp1g.mail.yandex.net (mxbackcorp1g.mail.yandex.net [IPv6:2a02:6b8:0:1402::301]) by forwardcorp1o.cmail.yandex.net (Yandex) with ESMTP id 7F86420F85; Mon, 28 Jan 2019 17:28:11 +0300 (MSK) Received: from smtpcorp1p.mail.yandex.net (smtpcorp1p.mail.yandex.net [2a02:6b8:0:1472:2741:0:8b6:10]) by mxbackcorp1g.mail.yandex.net (nwsmtp/Yandex) with ESMTP id laWI6kegN7-SBxeTRlo; Mon, 28 Jan 2019 17:28:11 +0300 Received: from dynamic-red.dhcp.yndx.net (dynamic-red.dhcp.yndx.net [2a02:6b8:0:408:250:b6ff:fe97:2682]) by smtpcorp1p.mail.yandex.net (nwsmtp/Yandex) with ESMTPSA id S7ZFtr57gZ-SB5OLSYR; Mon, 28 Jan 2019 17:28:11 +0300 (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (Client certificate not present) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=yandex-team.ru; s=default; t=1548685691; bh=+7QKyyejJSBp3X/M6cbZ+dDjuClzorOH1o1kuQAaKwU=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References; b=gCLW+kHdH+qXI0mbaSO80UyznoQwnzjkzu7nhQp0QgKy2uoyonYioB9wHtFZAvnAw eGetqPZS/+O1wUeFB+Uvv3L84emMVYSeuWKcblV3PvBxc4nnOXdWBGrzw7+Mkkg8o/ 9ho2EkGbU+TRFEiYJacSTxcE0LQQclvAo58uvQVw= Authentication-Results: mxbackcorp1g.mail.yandex.net; dkim=pass header.i=@yandex-team.ru From: Anton Kuchin To: qemu-devel@nongnu.org Date: Mon, 28 Jan 2019 17:27:47 +0300 Message-Id: <20190128142748.29140-2-antonkuchin@yandex-team.ru> X-Mailer: git-send-email 2.19.1 In-Reply-To: <20190128142748.29140-1-antonkuchin@yandex-team.ru> References: <20190128142748.29140-1-antonkuchin@yandex-team.ru> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic] X-Received-From: 2a02:6b8:0:1a72::290 Subject: [Qemu-devel] [PATCH 1/2] block: add functions to search BlockBackend by root BDS name 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 , qemu-block@nongnu.org, Markus Armbruster , "Dr. David Alan Gilbert" , Anton Kuchin , Max Reitz , Evgeny Yakovlev 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" BlockBackend name is empty if it is added with '-blockdev' and '-device' options or hotplugged with QMP but callers still expect backend to be accesible by name for operations like commit or statistics access. Intoduce blk_lookup function to search both by name and BDS-root node_name. Signed-off-by: Anton Kuchin --- block/block-backend.c | 29 +++++++++++++++++++++++++++++ include/sysemu/block-backend.h | 7 +++++++ 2 files changed, 36 insertions(+) diff --git a/block/block-backend.c b/block/block-backend.c index 60d37a0c3d..86a492853c 100644 --- a/block/block-backend.c +++ b/block/block-backend.c @@ -684,6 +684,35 @@ static BlockBackend *bdrv_first_blk(BlockDriverState *= bs) return NULL; } =20 +/* + * Return the BlockBackend that has attached BDS-tree root with + * node_name @node_name if it exists, else null. + * @node_name must not be null. + */ +static BlockBackend *blk_by_root_name(const char *node_name) +{ + BlockBackend *blk =3D NULL; + + assert(node_name); + while ((blk =3D blk_all_next(blk)) !=3D NULL) { + BlockDriverState *bs =3D blk_bs(blk); + if (bs && !strcmp(node_name, bs->node_name)) { + return blk; + } + } + return NULL; +} + +BlockBackend *blk_lookup(const char *name) +{ + assert(name); + BlockBackend *blk =3D blk_by_name(name); + if (!blk) { + blk =3D blk_by_root_name(name); + } + return blk; +} + /* * Returns true if @bs has an associated BlockBackend. */ diff --git a/include/sysemu/block-backend.h b/include/sysemu/block-backend.h index c96bcdee14..290b8f8fc9 100644 --- a/include/sysemu/block-backend.h +++ b/include/sysemu/block-backend.h @@ -85,6 +85,13 @@ void blk_unref(BlockBackend *blk); void blk_remove_all_bs(void); const char *blk_name(const BlockBackend *blk); BlockBackend *blk_by_name(const char *name); + +/* + * Search BlockBackend by name or root BlockDriverSate node_name. + * Hotplug BlockBackends have no name so need to also check BDS-tree roots + * @name must not be null. + */ +BlockBackend *blk_lookup(const char *name); BlockBackend *blk_next(BlockBackend *blk); BlockBackend *blk_all_next(BlockBackend *blk); bool monitor_add_blk(BlockBackend *blk, const char *name, Error **errp); --=20 2.19.1