On Thu, Mar 12, 2015 at 11:29:38PM +0800, Yi Wang wrote: > How about this? > > From 913cf2cd04167b7f6b892ac1ab405a617d886b97 Mon Sep 17 00:00:00 2001 > From: Yi Wang <up2w...@gmail.com> > Date: Thu, 12 Mar 2015 22:54:42 +0800 > Subject: [PATCH] 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 <up2w...@gmail.com> > --- > block/qcow2-snapshot.c | 6 ++---- > 1 file changed, 2 insertions(+), 4 deletions(-) > > diff --git a/block/qcow2-snapshot.c b/block/qcow2-snapshot.c > index 5b3903c..cb00f56 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) { > -- > 1.9.5.msysgit.0
Thanks, I've applied the patch to the block-next branch for QEMU 2.4: https://github.com/stefanha/qemu/commits/block-next Please send future patches as separate top-level email threads using git-send-email(1). I missed this reply since it was not a new email thread. git-am(1) refuses to apply the patch because of line-wrapping in your email, I had to fix that manually. Also, please stick to ASCII characters when possible. Your patch description uses the Chinese full stop (句號). I had to manually edit the patch because git-am(1) refuses to apply a copy-pasted patch without explicit character encoding information. Stefan
pgp4YczfQu1y4.pgp
Description: PGP signature