[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PATCH 3/3] HMP: show internal snapshots on a single device
From: |
Wenchao Xia |
Subject: |
[Qemu-devel] [PATCH 3/3] HMP: show internal snapshots on a single device |
Date: |
Wed, 19 Dec 2012 18:17:10 +0800 |
This patch add an option to show snapshots on a single block
device, so some snapshot do not exist on other block device
could be shown.
Signed-off-by: Wenchao Xia <address@hidden>
---
monitor.c | 6 +++---
savevm.c | 55 ++++++++++++++++++++++++++++++++++++++++++++++++++++++-
2 files changed, 57 insertions(+), 4 deletions(-)
diff --git a/monitor.c b/monitor.c
index ce0e74d..b019618 100644
--- a/monitor.c
+++ b/monitor.c
@@ -2613,9 +2613,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 fa32171..438eb24 100644
--- a/savevm.c
+++ b/savevm.c
@@ -2358,7 +2358,7 @@ void do_delvm(Monitor *mon, const QDict *qdict)
}
}
-void do_info_snapshots(Monitor *mon, const QDict *qdict)
+static void do_info_snapshots_vm(Monitor *mon)
{
BlockDriverState *bs, *bs1;
QEMUSnapshotInfo *sn_tab, *sn, s, *sn_info = &s;
@@ -2422,6 +2422,59 @@ void do_info_snapshots(Monitor *mon, const QDict *qdict)
}
+static void do_info_snapshots_blk(Monitor *mon, const char *device)
+{
+ BlockDriverState *bs;
+ QEMUSnapshotInfo *sn_tab, *sn;
+ int nb_sns, i;
+ char buf[256];
+
+ /* 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 ;
+ }
+
+ nb_sns = bdrv_snapshot_list(bs, &sn_tab);
+ if (nb_sns < 0) {
+ monitor_printf(mon, "Device %s bdrv_snapshot_list: error %d\n",
+ device, nb_sns);
+ return;
+ }
+
+ if (nb_sns == 0) {
+ monitor_printf(mon, "There is no snapshot available.\n");
+ return;
+ }
+
+ monitor_printf(mon, "Device %s:\n", device);
+ monitor_printf(mon, "%s\n", bdrv_snapshot_dump(buf, sizeof(buf), NULL));
+ for (i = 0; i < nb_sns; i++) {
+ sn = &sn_tab[i];
+ monitor_printf(mon, "%s\n", bdrv_snapshot_dump(buf, sizeof(buf), sn));
+ }
+ g_free(sn_tab);
+ return;
+}
+
+void do_info_snapshots(Monitor *mon, const QDict *qdict)
+{
+ /* Todo, there should be a layer rebuild qdict before enter this func. */
+ 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)
{
qemu_ram_set_idstr(memory_region_get_ram_addr(mr) & TARGET_PAGE_MASK,
--
1.7.1
- [Qemu-devel] [PATCH 1/3] HMP: add QDict to info callback handler, (continued)
[Qemu-devel] [PATCH 3/3] HMP: show internal snapshots on a single device,
Wenchao Xia <=