summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorYi Wang <up2wing@gmail.com>2015-03-12 22:54:42 +0800
committerKevin Wolf <kwolf@redhat.com>2015-04-28 15:36:08 +0200
commit407bc15033b2a8faeb7ca42aab63b7bcede76e10 (patch)
treed34a1612f3935fbaf0d2c29c0466f0fa45dd61e3
parent84cbd63f87c1d246f51ec8eee5367a5588f367fd (diff)
downloadhqemu-407bc15033b2a8faeb7ca42aab63b7bcede76e10.zip
hqemu-407bc15033b2a8faeb7ca42aab63b7bcede76e10.tar.gz
savevm: create snapshot failed when id_str already exists
The command "virsh create" will fail in such condition: vm has two disks: vda and vdb. vda has snapshot s1 with id "1", vdb doesn't have s1 but has snapshot s2 with id "1". When we want to run command "virsh create s1", del_existing_snapshots() only deletes s1 in vda, and bdrv_snapshot_create() tries to create vdb's snapshot s1 with id "1", but id "1" alreay exists in vdb with name "s2"! The simplest way is call find_new_snapshot_id() unconditionally. Signed-off-by: Yi Wang <up2wing@gmail.com> Signed-off-by: Stefan Hajnoczi <stefanha@redhat.com> Signed-off-by: Kevin Wolf <kwolf@redhat.com>
-rw-r--r--block/qcow2-snapshot.c6
1 files changed, 2 insertions, 4 deletions
diff --git a/block/qcow2-snapshot.c b/block/qcow2-snapshot.c
index 2aa9dcb..17bb211 100644
--- a/block/qcow2-snapshot.c
+++ b/block/qcow2-snapshot.c
@@ -351,10 +351,8 @@ int qcow2_snapshot_create(BlockDriverState *bs, QEMUSnapshotInfo *sn_info)
memset(sn, 0, sizeof(*sn));
- /* Generate an ID if it wasn't passed */
- if (sn_info->id_str[0] == '\0') {
- find_new_snapshot_id(bs, sn_info->id_str, sizeof(sn_info->id_str));
- }
+ /* Generate an ID */
+ find_new_snapshot_id(bs, sn_info->id_str, sizeof(sn_info->id_str));
/* Check that the ID is unique */
if (find_snapshot_by_id_and_name(bs, sn_info->id_str, NULL) >= 0) {
OpenPOWER on IntegriCloud