On 12/16/2016 11:24 AM, Peter Krempa wrote: > Images that became the backing chain of the current image due to the > snapshot need to be unlocked in the lock manager. Also if qemu was > paused during the snapshot the current top level images need to be > released until qemu is resumed so that they can be acquired properly. > > Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=1191901 > --- > src/qemu/qemu_driver.c | 17 +++++++++++++++++ > 1 file changed, 17 insertions(+) > > diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c > index 742b6ceda..13da035c2 100644 > --- a/src/qemu/qemu_driver.c > +++ b/src/qemu/qemu_driver.c > @@ -14452,6 +14452,23 @@ qemuDomainSnapshotCreateDiskActive(virQEMUDriverPtr driver, > virStorageFileUnlink(diskdata[i].src) < 0) > VIR_WARN("Unable to remove just-created %s", diskdata[i].src->path); > } > + } else { > + /* on successful snapshot we need to remove locks from the now-old > + * disks and if the VM is paused release locks on the images since qemu > + * stopped using them*/ > + bool paused = virDomainObjGetState(vm, NULL) != VIR_DOMAIN_RUNNING; > + > + for (i = 0; i < snap->def->ndisks; i++) { > + if (!diskdata[i].disk) Should this be disk.src? Or handle the _NONE case? since src only gets filled in for that. ACK in principal... John > + continue; > + > + if (paused) > + virDomainLockImageDetach(driver->lockManager, vm, > + diskdata[i].disk->src); > + > + virDomainLockImageDetach(driver->lockManager, vm, > + diskdata[i].disk->src->backingStore); > + } > } > > if (ret == 0 || !actions) { > -- libvir-list mailing list libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list