diff mbox

[6/6] block: Allow node-name in HMP 'info block'

Message ID 1410881796-18452-7-git-send-email-kwolf@redhat.com
State New
Headers show

Commit Message

Kevin Wolf Sept. 16, 2014, 3:36 p.m. UTC
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 <kwolf@redhat.com>
---
 hmp.c | 28 ++++++++++++++++++----------
 1 file changed, 18 insertions(+), 10 deletions(-)
diff mbox

Patch

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)