The optional parameter specifying a block device allows now to use a node-name instead of a drive name (and therefore to inspect any node in the graph).
Signed-off-by: Kevin Wolf <kw...@redhat.com> --- hmp.c | 28 ++++++++++++++++++---------- 1 file changed, 18 insertions(+), 10 deletions(-) diff --git a/hmp.c b/hmp.c index 811ceba..945e5fa 100644 --- a/hmp.c +++ b/hmp.c @@ -403,26 +403,34 @@ static void print_block_info(Monitor *mon, BlockInfo *info, void hmp_info_block(Monitor *mon, const QDict *qdict) { BlockInfoList *block_list, *info; + BlockDeviceInfoList *blockdev_list, *blockdev; const char *device = qdict_get_try_str(qdict, "device"); bool verbose = qdict_get_try_bool(qdict, "verbose", 0); - block_list = qmp_query_block(false, NULL, NULL); + block_list = qmp_query_block(!!device, device, NULL); + if (block_list) { + for (info = block_list; info; info = info->next) { + if (info != block_list) { + monitor_printf(mon, "\n"); + } - for (info = block_list; info; info = info->next) { - if (device && strcmp(device, info->value->device)) { - continue; + print_block_info(mon, info->value, info->value->has_inserted + ? info->value->inserted : NULL, + verbose); } + qapi_free_BlockInfoList(block_list); + return; + } - if (info != block_list) { + blockdev_list = qmp_query_block_node(!!device, device, NULL); + for (blockdev = blockdev_list; blockdev; blockdev = blockdev->next) { + if (blockdev != blockdev_list) { monitor_printf(mon, "\n"); } - print_block_info(mon, info->value, info->value->has_inserted - ? info->value->inserted : NULL, - verbose); + print_block_info(mon, NULL, blockdev->value, verbose); } - - qapi_free_BlockInfoList(block_list); + qapi_free_BlockDeviceInfoList(blockdev_list); } void hmp_info_blockstats(Monitor *mon, const QDict *qdict) -- 1.8.3.1