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 7c33ca3..44ee04f 100644
--- a/src/qemu/qemu_driver.c
+++ b/src/qemu/qemu_driver.c
@@ -16043,14 +16043,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);
@@ -16081,29 +16081,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
@@ -16177,21 +16154,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;
}
@@ -16295,7 +16257,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;
--
2.2.2