[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PATCH 11/11] hmp: show snapshot on single block device
From: |
Wenchao Xia |
Subject: |
[Qemu-devel] [PATCH 11/11] hmp: show snapshot on single block device |
Date: |
Sat, 29 Dec 2012 16:45:25 +0800 |
This patch use block layer API to qmp snapshot info on a block
device, then use the same code dumping vm snapshot info, to print
in monitor.
Note:
This patch need previous hmp extention patch which enable
info sub command take qdict * as paramter.
Signed-off-by: Wenchao Xia <address@hidden>
---
monitor.c | 6 +++---
savevm.c | 42 +++++++++++++++++++++++++++++++++++++++++-
2 files changed, 44 insertions(+), 4 deletions(-)
diff --git a/monitor.c b/monitor.c
index e1bcaa2..3dfdd4d 100644
--- a/monitor.c
+++ b/monitor.c
@@ -2580,9 +2580,9 @@ static mon_cmd_t info_cmds[] = {
},
{
.name = "snapshots",
- .args_type = "",
- .params = "",
- .help = "show the currently saved VM snapshots",
+ .args_type = "device:B?",
+ .params = "[device]",
+ .help = "show snapshots of whole vm or a single device",
.mhandler.info = do_info_snapshots,
},
{
diff --git a/savevm.c b/savevm.c
index 5f29316..413328a 100644
--- a/savevm.c
+++ b/savevm.c
@@ -2391,9 +2391,49 @@ static void do_info_snapshots_vm(Monitor *mon)
return;
}
+static void do_info_snapshots_blk(Monitor *mon, const char *device)
+{
+ Error *err = NULL;
+ SnapshotInfoList *list;
+ BlockDriverState *bs;
+
+ /* find the target bs */
+ bs = bdrv_find(device);
+ if (!bs) {
+ monitor_printf(mon, "Device '%s' not found.\n", device);
+ return ;
+ }
+
+ if (!bdrv_can_snapshot(bs)) {
+ monitor_printf(mon, "Device '%s' can't have snapshot.\n", device);
+ return ;
+ }
+
+ list = bdrv_query_snapshot_infolist(bs, NULL, NULL, &err);
+ if (error_is_set(&err)) {
+ hmp_handle_error(mon, &err);
+ return;
+ }
+
+ if (list == NULL) {
+ monitor_printf(mon, "There is no snapshot available.\n");
+ return;
+ }
+
+ monitor_printf(mon, "Device '%s':\n", device);
+ monitor_dump_snapshotinfolist(mon, list);
+ return;
+}
+
void do_info_snapshots(Monitor *mon, const QDict *qdict)
{
- do_info_snapshots_vm(mon);
+ const char *device = qdict_get_try_str(qdict, "device");
+ if (!device) {
+ do_info_snapshots_vm(mon);
+ } else {
+ do_info_snapshots_blk(mon, device);
+ }
+ return;
}
void vmstate_register_ram(MemoryRegion *mr, DeviceState *dev)
--
1.7.1
- [Qemu-devel] [PATCH 00/11] add qmp/hmp interfaces for snapshot info, Wenchao Xia, 2012/12/29
- [Qemu-devel] [PATCH 01/11] qemu-img: remove unused parameter in collect_image_info(), Wenchao Xia, 2012/12/29
- [Qemu-devel] [PATCH 02/11] block: add bdrv_get_filename() function, Wenchao Xia, 2012/12/29
- [Qemu-devel] [PATCH 03/11] qemu-img: remove parameter filename in collect_image_info(), Wenchao Xia, 2012/12/29
- [Qemu-devel] [PATCH 04/11] qemu-img: move image retrieving function to block layer, Wenchao Xia, 2012/12/29
- [Qemu-devel] [PATCH 06/11] qmp: add interface query-image, Wenchao Xia, 2012/12/29
- [Qemu-devel] [PATCH 07/11] block: move bdrv_find_snapshot to block.c, Wenchao Xia, 2012/12/29
- [Qemu-devel] [PATCH 05/11] block: rename bdrv_query_info to bdrv_query_block_info, Wenchao Xia, 2012/12/29
- [Qemu-devel] [PATCH 11/11] hmp: show snapshot on single block device,
Wenchao Xia <=
- [Qemu-devel] [PATCH 08/11] qmp: add interface query-snapshot, Wenchao Xia, 2012/12/29
- [Qemu-devel] [PATCH 10/11] hmp: retrieve info from qmp for snapshot info, Wenchao Xia, 2012/12/29
- [Qemu-devel] [PATCH 09/11] hmp: export function hmp_handle_error(), Wenchao Xia, 2012/12/29