qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Qemu-devel] [PATCH 08/11] qmp: add interface query-snapshot


From: Wenchao Xia
Subject: [Qemu-devel] [PATCH 08/11] qmp: add interface query-snapshot
Date: Sat, 29 Dec 2012 16:45:22 +0800

  This interface now return valid internal snapshots.

Signed-off-by: Wenchao Xia <address@hidden>
---
 block.c          |   32 ++++++++++++++++++++++++++++++++
 qapi-schema.json |   12 ++++++++++++
 2 files changed, 44 insertions(+), 0 deletions(-)

diff --git a/block.c b/block.c
index d7eb213..ad058f9 100644
--- a/block.c
+++ b/block.c
@@ -2892,6 +2892,38 @@ SnapshotInfoList 
*bdrv_query_snapshot_infolist(BlockDriverState *bs,
     return head;
 }
 
+/* check if sn exist on all block devices, 0 means valid */
+static int snapshot_filter_vm(const QEMUSnapshotInfo *sn, void *opaque)
+{
+    BlockDriverState *bs = (BlockDriverState *)opaque, *bs1 = NULL;
+    QEMUSnapshotInfo s, *sn_info = &s;
+    int ret = 0;
+
+    while ((bs1 = bdrv_next(bs1))) {
+        if (bdrv_can_snapshot(bs1) && bs1 != bs) {
+            ret = bdrv_snapshot_find(bs1, sn_info, sn->id_str);
+            if (ret < 0) {
+                ret = -1;
+                break;
+            }
+        }
+    }
+    return ret;
+}
+
+SnapshotInfoList *qmp_query_snapshot(Error **errp)
+{
+    BlockDriverState *bs;
+
+    bs = bdrv_snapshots();
+    if (!bs) {
+        error_setg(errp, "No available block device supports snapshots\n");
+        return NULL;
+    }
+
+    return bdrv_query_snapshot_infolist(bs, snapshot_filter_vm, bs, errp);
+}
+
 /* collect all internal snapshot info in a image for ImageInfo */
 static void collect_snapshots_info(BlockDriverState *bs,
                                    ImageInfo *info,
diff --git a/qapi-schema.json b/qapi-schema.json
index 40f96f3..2918817 100644
--- a/qapi-schema.json
+++ b/qapi-schema.json
@@ -731,6 +731,18 @@
 { 'command': 'query-image', 'returns': ['ImageInfo'] }
 
 ##
+# @query-snapshot:
+#
+# Get a list of valid Snapshots of virtual machine. Note that only valid
+# internal snapshot will be returned now, inconsitent one will not be returned.
+#
+# Returns: a list of @SnapshotInfo describing virtual machine snapshot.
+#
+# Since: 1.4
+##
+{ 'command': 'query-snapshot', 'returns': ['SnapshotInfo'] }
+
+##
 # @BlockDeviceStats:
 #
 # Statistics of a virtual block device or a block backing device.
-- 
1.7.1





reply via email to

[Prev in Thread] Current Thread [Next in Thread]