[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PATCH V4 04/13] block: add snapshot info query function bd
From: |
Wenchao Xia |
Subject: |
[Qemu-devel] [PATCH V4 04/13] block: add snapshot info query function bdrv_query_snapshot_infolist() |
Date: |
Thu, 17 Jan 2013 15:40:01 +0800 |
This patch add function bdrv_query_snapshot_infolist(), which will
return snapshot info of an image in qmp object format. The implementation
code are mostly copied from qemu-img.c with modification to fit more
for qmp based block layer API.
To help filter out snapshot info not needed, a call back function is
added in bdrv_query_snapshot_infolist().
bdrv_can_read_snapshot() should be called before call this function,
to avoid got *errp set unexpectly.
Signed-off-by: Wenchao Xia <address@hidden>
Reviewed-by: Eric Blake <address@hidden>
---
block.c | 46 ++++++++++++++++++++++++++++++++++++++++++++++
include/block/block.h | 7 +++++++
2 files changed, 53 insertions(+), 0 deletions(-)
diff --git a/block.c b/block.c
index 934bb3f..fba1be4 100644
--- a/block.c
+++ b/block.c
@@ -2842,6 +2842,52 @@ int coroutine_fn
bdrv_co_is_allocated_above(BlockDriverState *top,
return 0;
}
+SnapshotInfoList *bdrv_query_snapshot_infolist(BlockDriverState *bs,
+ SnapshotFilterFunc filter,
+ void *opaque,
+ Error **errp)
+{
+ int i, sn_count;
+ QEMUSnapshotInfo *sn_tab = NULL;
+ SnapshotInfoList *info_list, *cur_item = NULL, *head = NULL;
+
+ sn_count = bdrv_snapshot_list(bs, &sn_tab);
+ if (sn_count < 0) {
+ /* Fix me: set errp in bdrv_snapshot_list() instead of here */
+ error_setg(errp, "bdrv_snapshot_list: error %d\n", sn_count);
+ return NULL;
+ }
+
+ for (i = 0; i < sn_count; i++) {
+ if (filter && filter(&sn_tab[i], opaque) != 0) {
+ continue;
+ }
+
+ info_list = g_new0(SnapshotInfoList, 1);
+
+ info_list->value = g_new0(SnapshotInfo, 1);
+ info_list->value->id = g_strdup(sn_tab[i].id_str);
+ info_list->value->name = g_strdup(sn_tab[i].name);
+ info_list->value->vm_state_size = sn_tab[i].vm_state_size;
+ info_list->value->date_sec = sn_tab[i].date_sec;
+ info_list->value->date_nsec = sn_tab[i].date_nsec;
+ info_list->value->vm_clock_sec = sn_tab[i].vm_clock_nsec / 1000000000;
+ info_list->value->vm_clock_nsec = sn_tab[i].vm_clock_nsec % 1000000000;
+
+ /* XXX: waiting for the qapi to support qemu-queue.h types */
+ if (!cur_item) {
+ head = cur_item = info_list;
+ } else {
+ cur_item->next = info_list;
+ cur_item = info_list;
+ }
+
+ }
+
+ g_free(sn_tab);
+ return head;
+}
+
BlockInfo *bdrv_query_info(BlockDriverState *bs)
{
BlockInfo *info = g_malloc0(sizeof(*info));
diff --git a/include/block/block.h b/include/block/block.h
index b4c1612..ce18d4b 100644
--- a/include/block/block.h
+++ b/include/block/block.h
@@ -316,6 +316,13 @@ void bdrv_get_backing_filename(BlockDriverState *bs,
char *filename, int filename_size);
void bdrv_get_full_backing_filename(BlockDriverState *bs,
char *dest, size_t sz);
+
+typedef int (*SnapshotFilterFunc)(const QEMUSnapshotInfo *sn, void *opaque);
+/* assume bs is already opened, use qapi_free_* to free returned value. */
+SnapshotInfoList *bdrv_query_snapshot_infolist(BlockDriverState *bs,
+ SnapshotFilterFunc filter,
+ void *opaque,
+ Error **errp);
BlockInfo *bdrv_query_info(BlockDriverState *s);
BlockStats *bdrv_query_stats(const BlockDriverState *bs);
int bdrv_can_read_snapshot(BlockDriverState *bs);
--
1.7.1
- [Qemu-devel] [PATCH V4 00/13] add qmp/hmp interfaces for snapshot info, Wenchao Xia, 2013/01/17
- [Qemu-devel] [PATCH V4 01/13] qemu-img: remove unused parameter in collect_image_info(), Wenchao Xia, 2013/01/17
- [Qemu-devel] [PATCH V4 02/13] block: add bdrv_get_filename() function, Wenchao Xia, 2013/01/17
- [Qemu-devel] [PATCH V4 03/13] block: add bdrv_can_read_snapshot() function, Wenchao Xia, 2013/01/17
- [Qemu-devel] [PATCH V4 04/13] block: add snapshot info query function bdrv_query_snapshot_infolist(),
Wenchao Xia <=
- [Qemu-devel] [PATCH V4 05/13] block: add image info query function bdrv_query_image_info(), Wenchao Xia, 2013/01/17
- [Qemu-devel] [PATCH V4 06/13] qemu-img: switch image retrieving function, Wenchao Xia, 2013/01/17
- [Qemu-devel] [PATCH V4 07/13] block: rename bdrv_query_info to bdrv_query_block_info, Wenchao Xia, 2013/01/17
- [Qemu-devel] [PATCH V4 08/13] qmp: add interface query-images., Wenchao Xia, 2013/01/17
- [Qemu-devel] [PATCH V4 09/13] block: export function bdrv_find_snapshot(), Wenchao Xia, 2013/01/17
- [Qemu-devel] [PATCH V4 11/13] hmp: add function hmp_info_snapshots(), Wenchao Xia, 2013/01/17
- [Qemu-devel] [PATCH V4 10/13] qmp: add interface query-snapshots, Wenchao Xia, 2013/01/17
- [Qemu-devel] [PATCH V4 12/13] hmp: switch snapshot info function to qmp based one, Wenchao Xia, 2013/01/17