summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKevin Wolf <kwolf@redhat.com>2017-07-11 13:27:38 +0200
committerKevin Wolf <kwolf@redhat.com>2017-07-18 15:14:35 +0200
commit46eade7be83c110659ea9a6883fbd898d455ec06 (patch)
treec5f8fc27e2eaf478743d3f1a4ee1607c1e63eb03
parent77beef8365ef797c95e49d87f07ed5d60d583594 (diff)
downloadqemu-46eade7be83c110659ea9a6883fbd898d455ec06.tar.gz
block/qapi: Add qdev device name to query-block
With -blockdev/-device, users can indirectly create anonymous BlockBackends, while the state of such backends is still of interest. As a preparation for making such BBs visible in query-block, make sure that they can be identified even without a name by adding the ID/QOM path of their qdev device to BlockInfo. Signed-off-by: Kevin Wolf <kwolf@redhat.com> Reviewed-by: John Snow <jsnow@redhat.com>
-rw-r--r--block/qapi.c10
-rw-r--r--hmp.c3
-rw-r--r--qapi/block-core.json9
-rw-r--r--tests/qemu-iotests/067.out1
4 files changed, 22 insertions, 1 deletions
diff --git a/block/qapi.c b/block/qapi.c
index 080eb8f115..c8a45ec54c 100644
--- a/block/qapi.c
+++ b/block/qapi.c
@@ -322,11 +322,21 @@ static void bdrv_query_info(BlockBackend *blk, BlockInfo **p_info,
{
BlockInfo *info = g_malloc0(sizeof(*info));
BlockDriverState *bs = blk_bs(blk);
+ char *qdev;
+
info->device = g_strdup(blk_name(blk));
info->type = g_strdup("unknown");
info->locked = blk_dev_is_medium_locked(blk);
info->removable = blk_dev_has_removable_media(blk);
+ qdev = blk_get_attached_dev_id(blk);
+ if (qdev && *qdev) {
+ info->has_qdev = true;
+ info->qdev = qdev;
+ } else {
+ g_free(qdev);
+ }
+
if (blk_dev_has_tray(blk)) {
info->has_tray_open = true;
info->tray_open = blk_dev_is_tray_open(blk);
diff --git a/hmp.c b/hmp.c
index b42ae59a29..0e57f47682 100644
--- a/hmp.c
+++ b/hmp.c
@@ -425,6 +425,9 @@ static void print_block_info(Monitor *mon, BlockInfo *info,
}
if (info) {
+ if (info->has_qdev) {
+ monitor_printf(mon, " Attached to: %s\n", info->qdev);
+ }
if (info->has_io_status && info->io_status != BLOCK_DEVICE_IO_STATUS_OK) {
monitor_printf(mon, " I/O status: %s\n",
BlockDeviceIoStatus_lookup[info->io_status]);
diff --git a/qapi/block-core.json b/qapi/block-core.json
index c437aa50ef..ff8e2ba0cb 100644
--- a/qapi/block-core.json
+++ b/qapi/block-core.json
@@ -457,6 +457,9 @@
#
# @device: The device name associated with the virtual device.
#
+# @qdev: The qdev ID, or if no ID is assigned, the QOM path of the block
+# device. (since 2.10)
+#
# @type: This field is returned only for compatibility reasons, it should
# not be used (always returns 'unknown')
#
@@ -482,7 +485,7 @@
# Since: 0.14.0
##
{ 'struct': 'BlockInfo',
- 'data': {'device': 'str', 'type': 'str', 'removable': 'bool',
+ 'data': {'device': 'str', '*qdev': 'str', 'type': 'str', 'removable': 'bool',
'locked': 'bool', '*inserted': 'BlockDeviceInfo',
'*tray_open': 'bool', '*io-status': 'BlockDeviceIoStatus',
'*dirty-bitmaps': ['BlockDirtyInfo'] } }
@@ -577,6 +580,7 @@
# }
# }
# },
+# "qdev": "ide_disk",
# "type":"unknown"
# },
# {
@@ -584,12 +588,15 @@
# "device":"ide1-cd0",
# "locked":false,
# "removable":true,
+# "qdev": "/machine/unattached/device[23]",
+# "tray_open": false,
# "type":"unknown"
# },
# {
# "device":"floppy0",
# "locked":false,
# "removable":true,
+# "qdev": "/machine/unattached/device[20]",
# "type":"unknown"
# },
# {
diff --git a/tests/qemu-iotests/067.out b/tests/qemu-iotests/067.out
index 782eae27a0..e3c4496a9d 100644
--- a/tests/qemu-iotests/067.out
+++ b/tests/qemu-iotests/067.out
@@ -57,6 +57,7 @@ Testing: -drive file=TEST_DIR/t.qcow2,format=qcow2,if=none,id=disk -device virti
"file": "TEST_DIR/t.qcow2",
"encryption_key_missing": false
},
+ "qdev": "/machine/peripheral/virtio0/virtio-backend",
"type": "unknown"
}
]