This mirror function will return all image info including snapshots. Now Qemu have both query-images and query-block interfaces.
Signed-off-by: Wenchao Xia <xiaw...@linux.vnet.ibm.com> --- block.c | 19 +++++++++++++ qapi-schema.json | 27 +++++++++++++++++++ qmp-commands.hx | 76 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 122 insertions(+), 0 deletions(-) diff --git a/block.c b/block.c index 502c06e..8192d8e 100644 --- a/block.c +++ b/block.c @@ -2963,6 +2963,25 @@ ImageInfo *bdrv_query_image_info(BlockDriverState *bs, Error **errp) return info; } +DeviceImageInfoList *qmp_query_images(Error **errp) +{ + DeviceImageInfoList *head = NULL, **p_next = &head; + BlockDriverState *bs; + + QTAILQ_FOREACH(bs, &bdrv_states, list) { + DeviceImageInfo *dii = g_malloc0(sizeof(*dii)); + dii->device = g_strdup(bs->device_name); + dii->info = bdrv_query_image_info(bs, NULL); + DeviceImageInfoList *diil = g_malloc0(sizeof(*diil)); + diil->value = dii; + + *p_next = diil; + p_next = &diil->next; + } + + return head; +} + BlockInfo *bdrv_query_block_info(BlockDriverState *bs) { BlockInfo *info = g_malloc0(sizeof(*info)); diff --git a/qapi-schema.json b/qapi-schema.json index 5dfa052..565737c 100644 --- a/qapi-schema.json +++ b/qapi-schema.json @@ -245,6 +245,22 @@ '*backing-filename-format': 'str', '*snapshots': ['SnapshotInfo'] } } ## +# @DeviceImageInfo: +# +# Information about an image used by QEMU block device +# +# @device: name of the block device +# +# @info: info of the image used. +# +# Since: 1.4 +# +## + +{ 'type': 'DeviceImageInfo', + 'data': {'device': 'str', 'info': 'ImageInfo' } } + +## # @StatusInfo: # # Information about VCPU run state @@ -720,6 +736,17 @@ { 'command': 'query-block', 'returns': ['BlockInfo'] } ## +# @query-images: +# +# Get a list of DeviceImageInfo for all virtual block devices. +# +# Returns: a list of @DeviceImageInfo describing each virtual block device +# +# Since: 1.4 +## +{ 'command': 'query-images', 'returns': ['DeviceImageInfo'] } + +## # @BlockDeviceStats: # # Statistics of a virtual block device or a block backing device. diff --git a/qmp-commands.hx b/qmp-commands.hx index 5c692d0..c31a142 100644 --- a/qmp-commands.hx +++ b/qmp-commands.hx @@ -1668,6 +1668,82 @@ EQMP }, SQMP +query-images +----------- + +Show the block devices' images. + +Each block image information is stored in a json-object and the returned value +is a json-array of all devices' images. + +Each json-object contain the following: + +- "device": device name (json-string) +- "info": related image information, it is a json-object containing the following: + - "filename": image file name (json-string) + - "format": image format (json-string) + - "virtual-size": maximum capacity in bytes of the image (json-int) + - "dirty-flag": true if image is not cleanly closed (json-bool, optional) + - "actual-size": actual size on disk in bytes of the image (json-int, optional) + - "cluster-size": size of a cluster in bytes (json-int, optional) + - "encrypted": true if the image is encrypted (json-bool, optional) + - "backing_file": backing file name (json-string, optional) + - "full-backing-filename": full path of the backing file (json-string, optional) + - "backing-filename-format": the format of the backing file (json-string, optional) + - "snapshots": the internal snapshot info, it is an optional list of json-object + containing the following: + - "id": unique snapshot id (json-string) + - "name": internal snapshot name (json-string) + - "vm-state-size": size of the VM state in bytes (json-int) + - "date-sec": UTC date of the snapshot in seconds (json-int) + - "date-nsec": fractional part in nano seconds to be used with date-sec(json-int) + - "vm-clock-sec": VM clock relative to boot in seconds (json-int) + - "vm-clock-nsec": fractional part in nano seconds to be used with vm-clock-sec (json-int) + +Example: + +-> { "execute": "query-images" } +<- { + "return":[ + { + "device":"ide0-hd0", + "info":{ + "filename":"disks/test0.img", + "format":"qcow2", + "virtual-size":1024000 + } + }, + { + "device":"ide0-hd1", + "info":{ + "filename":"disks/test1.img", + "format":"qcow2", + "virtual-size":2048000, + "snapshots":[ + { + "id": "1", + "name": "snapshot1", + "vm-state-size": 0, + "date-sec": 10000200, + "date-nsec": 12, + "vm-clock-sec": 206, + "vm-clock-nsec": 30 + } + ] + } + } + ] + } + +EQMP + + { + .name = "query-images", + .args_type = "", + .mhandler.cmd_new = qmp_marshal_input_query_images, + }, + +SQMP query-blockstats ---------------- -- 1.7.1