From 7c62f239f4e04f4d9e0d4c703c44311b153dae0b Mon Sep 17 00:00:00 2001 From: Peter Krempa Date: Wed, 1 Apr 2015 10:13:34 +0200 Subject: [PATCH] qemu: blockPivot: Don't pause the VM any more since we don't use drive-reopen Support for drive-reopen was never present in the upstream code so we don't need to pause the VM when doing the block pivot. Kill all the code related to this semi-upstream artifact. --- src/qemu/qemu_driver.c | 48 +++++------------------------------------- 1 file changed, 5 insertions(+), 43 deletions(-) diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c index ac1d2831be..00e4e17810 100644 --- a/src/qemu/qemu_driver.c +++ b/src/qemu/qemu_driver.c @@ -16037,14 +16037,14 @@ qemuDiskPathToAlias(virDomainObjPtr vm, const char *path, int *idxret) * abort with pivot; this updates the VM definition as appropriate, on * either success or failure. */ static int -qemuDomainBlockPivot(virConnectPtr conn, - virQEMUDriverPtr driver, virDomainObjPtr vm, - const char *device, virDomainDiskDefPtr disk) +qemuDomainBlockPivot(virQEMUDriverPtr driver, + virDomainObjPtr vm, + const char *device, + virDomainDiskDefPtr disk) { int ret = -1, rc; qemuDomainObjPrivatePtr priv = vm->privateData; virDomainBlockJobInfo info; - bool resume = false; virStorageSourcePtr oldsrc = NULL; virQEMUDriverConfigPtr cfg = virQEMUDriverGetConfig(driver); @@ -16075,29 +16075,6 @@ qemuDomainBlockPivot(virConnectPtr conn, goto cleanup; } - /* If we are using the older 'drive-reopen', we want to make sure - * that management apps can tell whether the command succeeded, - * even if libvirtd is restarted at the wrong time. To accomplish - * that, we pause the guest before drive-reopen, and resume it - * only when we know the outcome; if libvirtd restarts, then - * management will see the guest still paused, and know that no - * guest I/O has caused the source and mirror to diverge. XXX - * With the newer 'block-job-complete', we need to use a - * persistent bitmap to make things safe; so for now, we just - * blindly pause the guest. */ - if (virDomainObjGetState(vm, NULL) == VIR_DOMAIN_RUNNING) { - if (qemuProcessStopCPUs(driver, vm, VIR_DOMAIN_PAUSED_SAVE, - QEMU_ASYNC_JOB_NONE) < 0) - goto cleanup; - - resume = true; - if (!virDomainObjIsActive(vm)) { - virReportError(VIR_ERR_INTERNAL_ERROR, "%s", - _("guest unexpectedly quit")); - goto cleanup; - } - } - /* For active commit, the mirror is part of the already labeled * chain. For blockcopy, we previously labeled only the top-level * image; but if the user is reusing an external image that @@ -16171,21 +16148,6 @@ qemuDomainBlockPivot(virConnectPtr conn, if (oldsrc) disk->src = oldsrc; - if (resume && virDomainObjIsActive(vm) && - qemuProcessStartCPUs(driver, vm, conn, - VIR_DOMAIN_RUNNING_UNPAUSED, - QEMU_ASYNC_JOB_NONE) < 0) { - virObjectEventPtr event = NULL; - event = virDomainEventLifecycleNewFromObj(vm, - VIR_DOMAIN_EVENT_SUSPENDED, - VIR_DOMAIN_EVENT_SUSPENDED_API_ERROR); - if (event) - qemuDomainEventQueue(driver, event); - if (virGetLastError() == NULL) { - virReportError(VIR_ERR_OPERATION_FAILED, "%s", - _("resuming after drive-reopen failed")); - } - } virObjectUnref(cfg); return ret; } @@ -16289,7 +16251,7 @@ qemuDomainBlockJobImpl(virDomainObjPtr vm, } if (disk->mirror && (flags & VIR_DOMAIN_BLOCK_JOB_ABORT_PIVOT)) { - ret = qemuDomainBlockPivot(conn, driver, vm, device, disk); + ret = qemuDomainBlockPivot(driver, vm, device, disk); if (ret < 0 && async) goto endjob; goto waitjob; -- GitLab