From: Wenchao Xia <xiawenc@linux.vnet.ibm.com>
To: qemu-devel@nongnu.org
Cc: kwolf@redhat.com, aliguori@us.ibm.com, stefanha@gmail.com,
armbru@redhat.com, lcapitulino@redhat.com, pbonzini@redhat.com,
Wenchao Xia <xiawenc@linux.vnet.ibm.com>
Subject: [Qemu-devel] [PATCH V10 02/17] block: distinguish id and name in bdrv_find_snapshot()
Date: Fri, 22 Mar 2013 22:18:58 +0800 [thread overview]
Message-ID: <1363961953-13561-3-git-send-email-xiawenc@linux.vnet.ibm.com> (raw)
In-Reply-To: <1363961953-13561-1-git-send-email-xiawenc@linux.vnet.ibm.com>
To make it clear about id and name in searching, the API is changed
a bit to distinguish them, and caller can choose to search by id or name.
Searching will be done with higher priority of id. This function also
returns negative value from bdrv_snapshot_list() instead of -ENOENT on
error now.
Signed-off-by: Wenchao Xia <xiawenc@linux.vnet.ibm.com>
Reviewed-by: Eric Blake <eblake@redhat.com>
---
block/snapshot.c | 46 ++++++++++++++++++++++++++++++++++++++--------
include/block/snapshot.h | 2 +-
savevm.c | 10 +++++-----
3 files changed, 44 insertions(+), 14 deletions(-)
diff --git a/block/snapshot.c b/block/snapshot.c
index c47a899..7b2026c 100644
--- a/block/snapshot.c
+++ b/block/snapshot.c
@@ -24,8 +24,20 @@
#include "block/snapshot.h"
+/*
+ * Try find an internal snapshot with @id or @name, @id have higher priority
+ * in searching.
+ *
+ * @bs: block device to search on, must not be NULL.
+ * @sn_info: snapshot information to be filled in, must not be NULL.
+ * @id: snapshot id to search with, can be NULL.
+ * @name: snapshot name to search with, can be NULL.
+ *
+ * returns 0 and @sn_info is filled with related information if found,
+ * otherwise it returns negative value.
+ */
int bdrv_snapshot_find(BlockDriverState *bs, QEMUSnapshotInfo *sn_info,
- const char *name)
+ const char *id, const char *name)
{
QEMUSnapshotInfo *sn_tab, *sn;
int nb_sns, i, ret;
@@ -33,16 +45,34 @@ int bdrv_snapshot_find(BlockDriverState *bs, QEMUSnapshotInfo *sn_info,
ret = -ENOENT;
nb_sns = bdrv_snapshot_list(bs, &sn_tab);
if (nb_sns < 0) {
- return ret;
+ return nb_sns;
}
- for (i = 0; i < nb_sns; i++) {
- sn = &sn_tab[i];
- if (!strcmp(sn->id_str, name) || !strcmp(sn->name, name)) {
- *sn_info = *sn;
- ret = 0;
- break;
+
+ /* search by id */
+ if (id) {
+ for (i = 0; i < nb_sns; i++) {
+ sn = &sn_tab[i];
+ if (!strcmp(sn->id_str, id)) {
+ *sn_info = *sn;
+ ret = 0;
+ goto out;
+ }
}
}
+
+ /* search by name */
+ if (name) {
+ for (i = 0; i < nb_sns; i++) {
+ sn = &sn_tab[i];
+ if (!strcmp(sn->name, name)) {
+ *sn_info = *sn;
+ ret = 0;
+ goto out;
+ }
+ }
+ }
+
+ out:
g_free(sn_tab);
return ret;
}
diff --git a/include/block/snapshot.h b/include/block/snapshot.h
index 4ad070c..a047a8e 100644
--- a/include/block/snapshot.h
+++ b/include/block/snapshot.h
@@ -33,5 +33,5 @@
#include "block.h"
int bdrv_snapshot_find(BlockDriverState *bs, QEMUSnapshotInfo *sn_info,
- const char *name);
+ const char *id, const char *name);
#endif
diff --git a/savevm.c b/savevm.c
index 82cb0e7..04fcd10 100644
--- a/savevm.c
+++ b/savevm.c
@@ -2098,7 +2098,7 @@ static int del_existing_snapshots(Monitor *mon, const char *name)
bs = NULL;
while ((bs = bdrv_next(bs))) {
if (bdrv_can_snapshot(bs) &&
- bdrv_snapshot_find(bs, snapshot, name) >= 0)
+ bdrv_snapshot_find(bs, snapshot, name, name) >= 0)
{
ret = bdrv_snapshot_delete(bs, name);
if (ret < 0) {
@@ -2158,7 +2158,7 @@ void do_savevm(Monitor *mon, const QDict *qdict)
sn->vm_clock_nsec = qemu_get_clock_ns(vm_clock);
if (name) {
- ret = bdrv_snapshot_find(bs, old_sn, name);
+ ret = bdrv_snapshot_find(bs, old_sn, name, name);
if (ret >= 0) {
pstrcpy(sn->name, sizeof(sn->name), old_sn->name);
pstrcpy(sn->id_str, sizeof(sn->id_str), old_sn->id_str);
@@ -2249,7 +2249,7 @@ int load_vmstate(const char *name)
}
/* Don't even try to load empty VM states */
- ret = bdrv_snapshot_find(bs_vm_state, &sn, name);
+ ret = bdrv_snapshot_find(bs_vm_state, &sn, name, name);
if (ret < 0) {
return ret;
} else if (sn.vm_state_size == 0) {
@@ -2273,7 +2273,7 @@ int load_vmstate(const char *name)
return -ENOTSUP;
}
- ret = bdrv_snapshot_find(bs, &sn, name);
+ ret = bdrv_snapshot_find(bs, &sn, name, name);
if (ret < 0) {
error_report("Device '%s' does not have the requested snapshot '%s'",
bdrv_get_device_name(bs), name);
@@ -2379,7 +2379,7 @@ void do_info_snapshots(Monitor *mon, const QDict *qdict)
while ((bs1 = bdrv_next(bs1))) {
if (bdrv_can_snapshot(bs1) && bs1 != bs) {
- ret = bdrv_snapshot_find(bs1, sn_info, sn->id_str);
+ ret = bdrv_snapshot_find(bs1, sn_info, sn->id_str, NULL);
if (ret < 0) {
available = 0;
break;
--
1.7.1
next prev parent reply other threads:[~2013-03-22 14:22 UTC|newest]
Thread overview: 38+ messages / expand[flat|nested] mbox.gz Atom feed top
2013-03-22 14:18 [Qemu-devel] [PATCH V10 00/17] qmp/hmp interfaces for internal snapshot info Wenchao Xia
2013-03-22 14:18 ` [Qemu-devel] [PATCH V10 01/17] block: move bdrv_snapshot_find() to block/snapshot.c Wenchao Xia
2013-03-22 14:18 ` Wenchao Xia [this message]
2013-03-22 14:18 ` [Qemu-devel] [PATCH V10 03/17] qemu-img: remove unused parameter in collect_image_info() Wenchao Xia
2013-03-22 14:19 ` [Qemu-devel] [PATCH V10 04/17] block: move collect_snapshots() and collect_image_info() to block/qapi.c Wenchao Xia
2013-03-22 14:19 ` [Qemu-devel] [PATCH V10 05/17] block: add snapshot info query function bdrv_query_snapshot_info_list() Wenchao Xia
2013-03-27 21:31 ` Eric Blake
2013-03-22 14:19 ` [Qemu-devel] [PATCH V10 06/17] block: add check for VM snapshot in bdrv_query_snapshot_info_list() Wenchao Xia
2013-03-22 14:19 ` [Qemu-devel] [PATCH V10 07/17] block: add image info query function bdrv_query_image_info() Wenchao Xia
2013-03-22 14:19 ` [Qemu-devel] [PATCH V10 08/17] block: move qmp_query_block() and bdrv_query_info() to block/qapi.c Wenchao Xia
2013-03-29 20:10 ` Eric Blake
2013-03-30 12:32 ` Wenchao Xia
2013-03-22 14:19 ` [Qemu-devel] [PATCH V10 09/17] qmp: add interface query-snapshots Wenchao Xia
2013-03-22 14:19 ` [Qemu-devel] [PATCH V10 10/17] qmp: add recursive member in ImageInfo Wenchao Xia
2013-03-29 22:54 ` Eric Blake
2013-03-22 14:19 ` [Qemu-devel] [PATCH V10 11/17] qmp: add ImageInfo in BlockDeviceInfo used by query-block Wenchao Xia
2013-03-28 9:54 ` Kevin Wolf
2013-03-29 2:35 ` Wenchao Xia
2013-04-02 8:09 ` Kevin Wolf
2013-04-02 8:54 ` Wenchao Xia
2013-04-02 9:30 ` Kevin Wolf
2013-03-22 14:19 ` [Qemu-devel] [PATCH V10 12/17] hmp: add function hmp_info_snapshots() Wenchao Xia
2013-03-29 23:04 ` Eric Blake
2013-03-30 12:38 ` Wenchao Xia
2013-04-02 7:39 ` Kevin Wolf
2013-03-22 14:19 ` [Qemu-devel] [PATCH V10 13/17] hmp: switch snapshot info function to qmp based one Wenchao Xia
2013-04-01 15:56 ` Eric Blake
2013-03-22 14:19 ` [Qemu-devel] [PATCH V10 14/17] block: move dump_human_image_info() to block/qapi.c Wenchao Xia
2013-03-22 14:19 ` [Qemu-devel] [PATCH V10 15/17] block: dump to buffer for bdrv_image_info_dump() Wenchao Xia
2013-04-01 19:17 ` Eric Blake
2013-04-02 2:42 ` Wenchao Xia
2013-03-22 14:19 ` [Qemu-devel] [PATCH V10 16/17] hmp: show ImageInfo in 'info block' Wenchao Xia
2013-03-28 11:06 ` Kevin Wolf
2013-03-22 14:19 ` [Qemu-devel] [PATCH V10 17/17] hmp: add parameter device and -b for info block Wenchao Xia
2013-03-28 11:09 ` Kevin Wolf
2013-03-29 2:48 ` Wenchao Xia
2013-04-02 7:46 ` Kevin Wolf
2013-03-28 11:10 ` [Qemu-devel] [PATCH V10 00/17] qmp/hmp interfaces for internal snapshot info Kevin Wolf
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1363961953-13561-3-git-send-email-xiawenc@linux.vnet.ibm.com \
--to=xiawenc@linux.vnet.ibm.com \
--cc=aliguori@us.ibm.com \
--cc=armbru@redhat.com \
--cc=kwolf@redhat.com \
--cc=lcapitulino@redhat.com \
--cc=pbonzini@redhat.com \
--cc=qemu-devel@nongnu.org \
--cc=stefanha@gmail.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).