[libvirt] [PATCH 5/6] qemu: snapshot: Properly handle image locking

John Ferlan jferlan at redhat.com
Sat Jan 7 18:37:48 UTC 2017



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) {
> 




More information about the libvir-list mailing list