This serial let qmp interface show delaied info, including internal snapshot /backing chain on all block device at runtime, which helps management stack and human user, by retrieving exactly the same info of what qemu saws.
Example: -> { "execute": "query-block" } <- { "return":[ { "io-status": "ok", "device":"ide0-hd0", "locked":false, "removable":false, "inserted":{ "ro":false, "drv":"qcow2", "encrypted":false, "file":"disks/test.qcow2", "backing_file_depth":1, "bps":1000000, "bps_rd":0, "bps_wr":0, "iops":1000000, "iops_rd":0, "iops_wr":0, "image":{ "filename":"disks/test.qcow2", "format":"qcow2", "virtual-size":2048000, "backing_file":"base.qcow2", "full-backing-filename":"disks/base.qcow2", "backing-filename-format:"qcow2", "snapshots":[ { "id": "1", "name": "snapshot1", "vm-state-size": 0, "date-sec": 10000200, "date-nsec": 12, "vm-clock-sec": 206, "vm-clock-nsec": 30 } ], "backing-image":{ "filename":"disks/base.qcow2", "format":"qcow2", "virtual-size":2048000 } } }, "type":"unknown" }, { "io-status": "ok", "device":"ide1-cd0", "locked":false, "removable":true, "type":"unknown" }, { "device":"floppy0", "locked":false, "removable":true, "type":"unknown" }, { "device":"sd0", "locked":false, "removable":true, "type":"unknown" } ] } These patches follows the rule that use qmp to retieve information, hmp layer just does a translation from qmp object it got. To make code graceful, snapshot and image info retrieving code in qemu and qemu-img are merged into block layer, and some function name was adjusted to make it tips better. For the part touch by the serial, it works as: qemu qemu-img dump_monitor dump_stdout |--------------| | block/qapi.c Special thanks for Markus, Stefan, Kevin, Eric reviewing many times. v13: Renamed the serial as "enhancement for qmp/hmp interfaces of block info". Seperated the common part of code moving and hmp printf as a standalone serial, which can be used by both mine and Pavel's work. This serial depend on it: "[PATCH V3 0/4] qapi and snapshot code clean up in block layer", https://lists.gnu.org/archive/html/qemu-devel/2013-05/msg03539.html Removed the VM snapshot info part, since it relate to VM snapshot creating logic, which should be changed together with Pavel's serial. Address Eric's comments: 2/6: bdrv_query_image_info() returns void now, only use *errp to tip error. Wenchao Xia (6): 1 block: add snapshot info query function bdrv_query_snapshot_info_list() 2 block: add image info query function bdrv_query_image_info() 3 qmp: add recursive member in ImageInfo 4 qmp: add ImageInfo in BlockDeviceInfo used by query-block 5 hmp: show ImageInfo in 'info block' 6 hmp: add parameters device and -v for info block block/qapi.c | 148 ++++++++++++++++++++++++++++++++++++++++++-------- hmp.c | 21 +++++++ include/block/qapi.h | 14 +++-- monitor.c | 7 ++- qapi-schema.json | 10 +++- qemu-img.c | 10 +++- qmp-commands.hx | 69 +++++++++++++++++++++++- 7 files changed, 242 insertions(+), 37 deletions(-)