From nobody Wed Nov 5 13:00:27 2025 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail(p=none dis=none) header.from=virtuozzo.com Return-Path: Received: from lists.gnu.org (lists.gnu.org [208.118.235.17]) by mx.zohomail.com with SMTPS id 1534440691746695.0479970563644; Thu, 16 Aug 2018 10:31:31 -0700 (PDT) Received: from localhost ([::1]:57385 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1fqM7O-0008US-6k for importer@patchew.org; Thu, 16 Aug 2018 13:31:30 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:44719) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1fqLx1-0007Ib-Dc for qemu-devel@nongnu.org; Thu, 16 Aug 2018 13:20:48 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1fqLwy-0001au-To for qemu-devel@nongnu.org; Thu, 16 Aug 2018 13:20:47 -0400 Received: from mail-am5eur02on0703.outbound.protection.outlook.com ([2a01:111:f400:fe07::703]:34160 helo=EUR02-AM5-obe.outbound.protection.outlook.com) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1fqLwy-0001an-Ic; Thu, 16 Aug 2018 13:20:44 -0400 Received: from vova-pc.sw.ru (185.231.240.5) by AM4PR08MB2913.eurprd08.prod.outlook.com (2603:10a6:205:e::26) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.1038.25; Thu, 16 Aug 2018 17:20:41 +0000 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=virtuozzo.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=ur2O6a1SMVQa8jbcK6O5eFkgE9UyUuzuW2NREI9YvGs=; b=HEoGHAYZAtR8QYAytXJxkwx2cKaPM2w6mmkIVsQfjH86yqImDUg6vYLAeiM7UXdboTsEmWfJ5q+kW7WjLA/68L4eFLj+T0dtM1sk1qfjyEhX7evQFuUduvoHZiLGdjQOJPDXQ/Q0ukR8GzxfepwlDmdwOxAiKWAmHRlLijyRA1A= Authentication-Results: spf=none (sender IP is ) smtp.mailfrom=vsementsov@virtuozzo.com; From: Vladimir Sementsov-Ogievskiy To: qemu-devel@nongnu.org, qemu-block@nongnu.org Date: Thu, 16 Aug 2018 20:20:25 +0300 Message-Id: <1534440027-10528-3-git-send-email-vsementsov@virtuozzo.com> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1534440027-10528-1-git-send-email-vsementsov@virtuozzo.com> References: <1534440027-10528-1-git-send-email-vsementsov@virtuozzo.com> MIME-Version: 1.0 X-Originating-IP: [185.231.240.5] X-ClientProxiedBy: DB6PR0202CA0005.eurprd02.prod.outlook.com (2603:10a6:4:29::15) To AM4PR08MB2913.eurprd08.prod.outlook.com (2603:10a6:205:e::26) X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 9b4435a3-4e26-4326-1231-08d6039c9856 X-Microsoft-Antispam: BCL:0; PCL:0; RULEID:(7020095)(4652040)(8989137)(4534165)(4627221)(201703031133081)(201702281549075)(8990107)(5600074)(711020)(2017052603328)(7153060)(7193020); SRVR:AM4PR08MB2913; X-Microsoft-Exchange-Diagnostics: 1; AM4PR08MB2913; 3:ZyNk4xYuNT7pUHwb4sYIvBxkITEkcm9zQfyHxo6Yfq+cvCY3nNFrrubNsfmGYtDSyyw2JKY3s1TSfn9sDXUtC+cwQVkLzJRAoQggkGynv5ewEELQpf3OCjmhXSeYQ4xvcbUgshHrY2PlUUO7aD5s2Jf09XNpDTiOo0VEKvSgXWN6G9Iw4e+xKExgEB4Kz7HgrRxmZygfLBpac9hULjY90t7nElbQ0QM7mkgZZlL3WFjheJTtpV2j/W+xXCPVWn/U; 25:aiB2G1iMBfzVCuMyIsgM+nYgZ3KA84tsUmSe8AN3kgKQ3D4AR5UsP9y2NLLwXXsloCQ7JhxP0RGu5EsSRvuyIro55K1rK+uUcfVwaW15MTPJXiWUR8s03xL3FFsd97+4rSosGMWiXEnNeHIXBeg5p5HCTz1BxQvV9iUjawQhX6cUvlwJ6DkpHVGR/wWCOJmYBq/6IieTWxmOfAG/AK9V+Y5KeVRmYI+0gJS+QqHR4UTJ6VczSCFoszkFYp6uBbGtEU7kakwhy5CqL3fuJ4czuqTMMNUikjNTLosXbHTDSBucCb5Ny+uPXQAFglTvMomatHx0S07dlCzm7PGtdJpIiQ==; 31:T99b2vMfEP5LX/kOuzdGUIa3gDQD1Wk4ykaaa/D2WuR1omTMuz0z1U4bCBg+CL/ckXf0kDnLf82ZsQ1c1xejWWhy5MChMZuMCPzir6aGFzopUB3Ut7QBZa4JvmvBoWfgFaagycw5ON9apSeXmm03pZeTxlrGRbTAXmL+/PCI6FZJatraTj3pLmv1UleZzaHQ9Lf63BE9tCNRGC70ZPFzgDO1G9f8tDFhfRyAw3Mo+ac= X-MS-TrafficTypeDiagnostic: AM4PR08MB2913: X-Microsoft-Exchange-Diagnostics: 1; AM4PR08MB2913; 20:UyNoWm+LOjR6jumi6linb3ZqIrmNjQ6fEq7DFowZqmc+DZXbyzRcvIuaWINAt+ao/DgIRQzxPxfQ93o2LEXUpvXxNtbFXMq0WyhvVmcy9pqJZeMoUmy7BVX0Fmu44iaEn3O/0eQrUDROoTg5Alsw6RiRZYMQRWO9kPHrAqKNRvhaL2dAnROlRJQqrZY/qG2EF0Lag2Wqp81gWX9K5evswmnVjwdKluqRe848HFF4MmaMemtfis7MCbIyqt6mXClommMV+jGx5IW+D37nTMQ8iwfKDTiE6r1vIYCrz0d0XyzB71qI18ECtz8GvVwJ+XlLu4rQIzNRZ0yRMngZr40CrmfDGDalOGAmtKdVcZfEzkh+xXxRqKctMr8V2mkprb95k6CgFqHgBnQSt6Pwl8FdW3lmcim+FNNb/OdY59qNMY9bUw3oGFcGM8Ke1VeqSeyIqjpUawlc1DrftVC1WsrSeutyrx1AUS+/GNWiD63dl0TCsvw6a8x2pM1ndltiqrtu; 4:QWTCe/dbqOj93BIYaP7H2akT5QxJerpgWbFnRLK4RgloZExD2K7MiqyJfkgwxKuvUuaeYe31FeAmGCMJ1wY4Q8SaAi6nN8leXBW/jfSevWsvoHDy9DjAQel3COtjk0KXpyHxBSpTZ5Ok0B+8ww02u9YPNogI+6bzI9TPGQA51zV5WZSgD/Y8LTwO0lZYIPGTTroLyPtTHLQ0oFJtYj6225WI3EOSYS4CTPXd3qHGW4xK3TMpIvWsmnsKVZNqBSYxYNsVKkDJWYagJDT8w28p3g== X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:; X-MS-Exchange-SenderADCheck: 1 X-Exchange-Antispam-Report-CFA-Test: BCL:0; PCL:0; RULEID:(6040522)(2401047)(8121501046)(5005006)(3231311)(944501410)(52105095)(10201501046)(93006095)(93001095)(3002001)(149027)(150027)(6041310)(20161123558120)(201703131423095)(201702281528075)(20161123555045)(201703061421075)(201703061406153)(20161123560045)(20161123564045)(20161123562045)(201708071742011)(7699016); SRVR:AM4PR08MB2913; BCL:0; PCL:0; RULEID:; SRVR:AM4PR08MB2913; X-Forefront-PRVS: 07665BE9D1 X-Forefront-Antispam-Report: SFV:NSPM; SFS:(10019020)(366004)(39850400004)(396003)(136003)(376002)(346002)(189003)(199004)(50226002)(16586007)(386003)(6506007)(36756003)(186003)(316002)(4326008)(53416004)(26005)(5024004)(16526019)(8936002)(52116002)(446003)(69596002)(11346002)(2616005)(47776003)(25786009)(76176011)(476003)(66066001)(486006)(51416003)(956004)(68736007)(6512007)(8676002)(105586002)(81166006)(86362001)(2906002)(5660300001)(6666003)(7416002)(106356001)(305945005)(7736002)(3846002)(6116002)(478600001)(50466002)(97736004)(48376002)(81156014)(6486002)(53936002)(16060500001); DIR:OUT; SFP:1102; SCL:1; SRVR:AM4PR08MB2913; H:vova-pc.sw.ru; FPR:; SPF:None; LANG:en; PTR:InfoNoRecords; MX:1; A:1; Received-SPF: pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) client-ip=208.118.235.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: None (protection.outlook.com: virtuozzo.com does not designate permitted sender hosts) X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1; AM4PR08MB2913; 23:ODDlLSw9Ruz50mI2D81IznHkKdpzsGzdtPX4g6Yb2?= =?us-ascii?Q?j1vxSgXryPTaC76dznyhQZbhngrq9uhsvUXUes9/di/zUDz3AfNwUJewE5NK?= =?us-ascii?Q?RRx63WjETb2S52TfdHUmUAUgGy7BSehQmXccSevNSEQAsOUK9YGH0SdpHjLO?= =?us-ascii?Q?NUY+2TF42xe6taOZO8GyGcm+kkVX9QMMFBhwaoBEmiY/GIvTctLvgmICBz/j?= =?us-ascii?Q?zS6/hashZ9+fTYoqDOgqwYwhSU/zIpczBTY5nCtPr1JLDK+vdXaGoq9d2fQs?= =?us-ascii?Q?pSxiLI4UGsIyEw/+LkkW5A/D45PFMN8+qnm6W1ebFT12M/RrXe7meHfuHIhQ?= =?us-ascii?Q?WDt8s4RW+M3YfSj/xSxjcwyP4wDfkAWWR1VtxN1SZQqILLLEqMS75tnjZuLJ?= =?us-ascii?Q?zS2zZdFamDy9EgDN2b91HcxYUBPsEK2Nwd4OYCcl33tmXbP+JuggA/t0Ft/o?= =?us-ascii?Q?ihn4j2zcg1OO4suqwmiQgI8YJuv+PEVZORMLZbsutvfxH+y9JzO2av6ljYDa?= =?us-ascii?Q?ssia5Fm4M1oSy/JsNwUcaUK6wrbP2+M9WscXHYKHm8DHUtURv6J16mdRWPNB?= =?us-ascii?Q?79bXCRhSMp6a+eVoAAO02J2OMQuTTkt3yWrnbJP8Uxncksh2E6e5mpKK02hb?= =?us-ascii?Q?8Po//KG7+jvE/HLaUL4P7GFKlFxtbEpCmum/J5po2bO0fuufrcSsD8udaQER?= =?us-ascii?Q?GWMhZM+pSGZGx1onVe5HcmYn4suFEml0VkfLasflD2n5i735OSU2EwwTGoFE?= =?us-ascii?Q?uiAyiD4d664riegFk1BGlk/udgZ5eOEI+bXCfJpKlg2ucMThwSKh4AREW9P9?= =?us-ascii?Q?oLzrO+gVFewr4z6qKntxcN/HQvAdr5UNcK/A6xBNdkwMedYtbRmu9tp8mrKE?= =?us-ascii?Q?rMoq9GOlS3mRAM5IlMb0bl6cw5+IiTiivbcz7wSAz9Vq76fZBV5dHXbyUGZr?= =?us-ascii?Q?ktfyuqRfQQkjWo4qvWDTBP3YhW/okaZVD5EGUOZdGu/Hy4oe7ARu1ZYGg0OQ?= =?us-ascii?Q?zR+YgXyf4mo1KhF069W45oOKdNhzthsW9qu0nwVgLZdnd8wEVqNBp7QBdJj2?= =?us-ascii?Q?YDvUOXVAF4PGAO9mfuoNkjfYbB12/BnlokrEwcmqs+IhtVx1EjeKzU+n09Sc?= =?us-ascii?Q?1xES9DJQF7syDm1p9VoDPETYdlmtjKgi244Oe5L2LTtOo8nFTgovmEa02kZU?= =?us-ascii?Q?KVswmY/79tkNqiphsTuqR2e87C8ZKi7EPeZ7E5uENK3Ibk7O9sVUAo0uBKqI?= =?us-ascii?Q?3qsRDQsZZ0TkhiYeSg=3D?= X-Microsoft-Antispam-Message-Info: UKXlWFcaTNLq89QWJXv/3MJunlWcNKS573aDTAlY4bZodNFifIsX4BsACGvfkUMR+aYops8PN88G+dH1ajYhVcegU6f5FREwFZYV6a8ARgxxv3fM/mmT+Sui3nMx9Vonf1mWAtU6emn81at0570zwxQh7bP76mbTBm1OGTO82sqLQd1tDBvFXanrU6lBrG212DAdo825RZixElu8b9YseHj+11GuRrsWwCbVBv0vWZ07YnRJ2BQiH3t9QjqxGVcPIHqaMmubpViBXQ25pcE5y4hKLlfQjib79D4ECSyZfgVQok19wIz6bHRculBcY2GAPZfzuqFe09uG3Ydjp2w8G9cVZBQFM+g3lIBa1O2iUeY= X-Microsoft-Exchange-Diagnostics: 1; AM4PR08MB2913; 6:jYH/HkvEnQmtPhWcslKEq/9BVtO0OfHCqgpqKS5mE1BKqs/37IqimmYUOGHjF9AAGvPVpIbBWhSkijIgtRF/239vyTQeYI3BozveZebIQ2fHp5KPDwGMfjz4bsjSMPo99Xhb/slYC1IulCZmJGCavAIZqKt9m3IYK+foUu7/hg5Di2NsPf8RSUpAmt2pok+n7hXpT1/jDWicdPmlangfrNkgoWV8JPMUUMIu0QPeqakXAo8qJPNDlvdTnMTSlTmn/IPF3VxTi5Ree95uGfh90VU54Q9jmN1BTmgyQ9olgOf3hVRppYUi31gdhZay/TGFatVnYp53iESUg/C+1LUeEfPmwxYf1oI3aWBrAtv3W5AMt+EwZ8bUuz/F8SN8oiyzdE1znY/FiHx+xwD5ijQCi+Fh8HDgOVpXFuae+hX8zaMbXE+dXK2xaPkuhiqDYYLOXf2fOilT8mPP+somfphLjw==; 5:abBxrQX2bgzWv6oUeJI1Xbo4QBEiyh/6kENrudJSI41GaxYfKw9eX53DaoiwILzibKbkocmircUgEhQq6VUVUpDmsjhJJY8QV/HJvT6+ZWJExyjsXQT+keawfJIKXTLwkaqzabcdQo4Y8dawBTKk1HNxvJjp6CI1pQg3l+DSEm8=; 7:wF84bqeCLy29n6JBPCDIlmA4E/ECzEI+/+8q5coxlyPAdN1mrOsikQ9sTSh/3Lib/4PWhBnUJIZg2bPWrvG7gphor0v10YvD+rfW3Q7CM+Wn47Kbj7DZT4JNEZ0cVObePQHxAAqls5YA8SqWf0Q4ZM8pOM52h7FK0jkDYtHHDZ5FZ4hTIh5yoKDVKXOAFuLGXayqIe355brF0JTjmdNO16lz5eqhaPQXX+l2T/nJ31F2ExItTlT6O9Le+51ZZTua SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1; AM4PR08MB2913; 20:/O/Nso2RcJpIUaEV504h+7Vo8RzDJavfhLSxJH85Kjr8kuTtSB1wpMJEXdt1UfQ2H2y9VmDyR7yV4hHog/PWEHAzS7XSC7R/tzFWdWY+h/z9AeLobHCId+zmh0IaL6DjGhvvefa9DLRG9i9Ymges4UWj0ddGl93nGRFgs99/lrI= X-OriginatorOrg: virtuozzo.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 16 Aug 2018 17:20:41.1312 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 9b4435a3-4e26-4326-1231-08d6039c9856 X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 0bc7f26d-0264-416e-a6fc-8352af79c58f X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM4PR08MB2913 X-detected-operating-system: by eggs.gnu.org: Windows 7 or 8 [fuzzy] X-Received-From: 2a01:111:f400:fe07::703 Subject: [Qemu-devel] [PATCH 2/4] qapi: add x-query-block-nodes-relations 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: kwolf@redhat.com, vsementsov@virtuozzo.com, famz@redhat.com, ehabkost@redhat.com, jsnow@redhat.com, armbru@redhat.com, mreitz@redhat.com, pbonzini@redhat.com, stefanha@redhat.com, crosa@redhat.com, den@openvz.org Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) X-ZohoMail: RDMRC_1 RDKM_2 RSF_0 Z_629925259 SPT_0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Add new command, returning list of block nodes graph edges. Signed-off-by: Vladimir Sementsov-Ogievskiy --- qapi/block-core.json | 71 +++++++++++++++++++++++++++++++++++++++++++++++= ++++ include/block/block.h | 1 + block.c | 57 +++++++++++++++++++++++++++++++++++++++++ blockdev.c | 5 ++++ 4 files changed, 134 insertions(+) diff --git a/qapi/block-core.json b/qapi/block-core.json index 4c7a37afdc..ad7b62c49b 100644 --- a/qapi/block-core.json +++ b/qapi/block-core.json @@ -1630,6 +1630,77 @@ { 'command': 'query-named-block-nodes', 'returns': [ 'BlockDeviceInfo' ] } =20 ## +# @BlockPermission: +# +# Enum of base block permissions. +# +# @consistent-read: A user that has the "permission" of consistent reads is +# guaranteed that their view of the contents of the block +# device is complete and self-consistent, representing t= he +# contents of a disk at a specific point. +# For most block devices (including their backing files)= this +# is true, but the property cannot be maintained in a few +# situations like for intermediate nodes of a commit blo= ck +# job. +# +# @write: This permission is required to change the visible disk contents. +# +# @write-unchanged: This permission (which is weaker than BLK_PERM_WRITE) = is +# both enough and required for writes to the block node = when +# the caller promises that the visible disk content does= n't +# change. +# As the BLK_PERM_WRITE permission is strictly stronger, +# either is sufficient to perform an unchanging write. +# +# @resize: This permission is required to change the size of a block node. +# +# @graph-mod: This permission is required to change the node that this +# BdrvChild points to. +# +# Since: 3.1 +## +{ 'enum': 'BlockPermission', + 'data': [ 'consistent-read', 'write', 'write-unchanged', 'resize', + 'graph-mod' ] } + +## +# @BlockRelationInfo: +# +# Information about relation between block node and its parent. +# +# @parent: node name or some other parent name/description, if parent is n= ot a +# block node. +# +# @parent-is-bds: parent is block node. +# +# @child: node name +# +# @name: name of the relation (examples are 'file' and 'backing') +# +# @perm: Granted permissions for the parent operating on the child. +# +# @shared-perm: Permissions that can still be granted to other users of the +# child while it is still attached this parent. +# +# Since: 3.1 +## +{ 'struct': 'BlockRelationInfo', + 'data': { 'parent': 'str', 'parent-is-bds': 'bool', 'child': 'str', + 'name': 'str', 'perm': [ 'BlockPermission' ], + 'shared-perm': [ 'BlockPermission' ] } } + +## +# @x-query-block-nodes-relations: +# +# Get the block relations list. +# +# Returns: the list of BlockRelationInfo. +# +# Since: 3.1 +## +{ 'command': 'x-query-block-nodes-relations', 'returns': [ 'BlockRelationI= nfo' ] } + +## # @drive-mirror: # # Start mirroring a block device's writes to a new destination. target diff --git a/include/block/block.h b/include/block/block.h index 4e0871aaf9..04136634c2 100644 --- a/include/block/block.h +++ b/include/block/block.h @@ -448,6 +448,7 @@ void bdrv_eject(BlockDriverState *bs, bool eject_flag); const char *bdrv_get_format_name(BlockDriverState *bs); BlockDriverState *bdrv_find_node(const char *node_name); BlockDeviceInfoList *bdrv_named_nodes_list(Error **errp); +BlockRelationInfoList *bdrv_block_relations_list(Error **errp); BlockDriverState *bdrv_lookup_bs(const char *device, const char *node_name, Error **errp); diff --git a/block.c b/block.c index 6161dbe3eb..776fc714af 100644 --- a/block.c +++ b/block.c @@ -4003,6 +4003,63 @@ BlockDeviceInfoList *bdrv_named_nodes_list(Error **e= rrp) return list; } =20 +BlockRelationInfoList *bdrv_block_relations_list(Error **errp) +{ + BlockRelationInfoList *list =3D NULL, *entry; + BlockDriverState *bs; + struct { + unsigned int flag; + BlockPermission num; + } permissions[] =3D { + { BLK_PERM_CONSISTENT_READ, BLOCK_PERMISSION_CONSISTENT_READ }, + { BLK_PERM_WRITE, BLOCK_PERMISSION_WRITE }, + { BLK_PERM_WRITE_UNCHANGED, BLOCK_PERMISSION_WRITE_UNCHANGED }, + { BLK_PERM_RESIZE, BLOCK_PERMISSION_RESIZE }, + { BLK_PERM_GRAPH_MOD, BLOCK_PERMISSION_GRAPH_MOD }, + { 0, 0 } + }, *p; + + QTAILQ_FOREACH(bs, &graph_bdrv_states, node_list) { + BdrvChild *child; + + QLIST_FOREACH(child, &bs->parents, next_parent) { + entry =3D g_new0(BlockRelationInfoList, 1); + BlockRelationInfo *info =3D g_new0(BlockRelationInfo, 1); + + info->parent_is_bds =3D child->role->parent_is_bds; + info->parent =3D child->role->parent_is_bds ? + g_strdup(bdrv_get_node_name(child->opaque))= : + bdrv_child_user_desc(child); + info->child =3D g_strdup(bs->node_name); + assert(bs =3D=3D child->bs); + info->name =3D g_strdup(child->name); + + for (p =3D permissions; p->flag; p++) { + BlockPermissionList *en; + + if (p->flag & child->perm) { + en =3D g_new(BlockPermissionList, 1); + en->value =3D p->num; + en->next =3D info->perm; + info->perm =3D en; + } + if (p->flag & child->shared_perm) { + en =3D g_new(BlockPermissionList, 1); + en->value =3D p->num; + en->next =3D info->shared_perm; + info->shared_perm =3D en; + } + } + + entry->value =3D info; + entry->next =3D list; + list =3D entry; + } + } + + return list; +} + BlockDriverState *bdrv_lookup_bs(const char *device, const char *node_name, Error **errp) diff --git a/blockdev.c b/blockdev.c index 72f5347df5..74bdc2e93e 100644 --- a/blockdev.c +++ b/blockdev.c @@ -3485,6 +3485,11 @@ BlockDeviceInfoList *qmp_query_named_block_nodes(Err= or **errp) return bdrv_named_nodes_list(errp); } =20 +BlockRelationInfoList *qmp_x_query_block_nodes_relations(Error **errp) +{ + return bdrv_block_relations_list(errp); +} + BlockJob *do_blockdev_backup(BlockdevBackup *backup, JobTxn *txn, Error **errp) { --=20 2.11.1