mirror of
https://gitlab.com/libvirt/libvirt.git
synced 2024-11-08 22:39:56 +00:00
qemu: Transition domain to PAUSED after 'stop' command
Currently, we mark domain PAUSED (but not emit an event) just before we issue 'stop' on monitor; This command can take ages to finish, esp. when domain's doing a lot of IO - users can enforce qemu to open files with O_DIRECT which doesn't return from write() until data reaches the block device. Having said that, we report PAUSED even if domain is not paused yet.
This commit is contained in:
parent
db8760ffe6
commit
a5e8beef4f
@ -2708,13 +2708,9 @@ int qemuProcessStopCPUs(struct qemud_driver *driver, virDomainObjPtr vm,
|
||||
enum qemuDomainAsyncJob asyncJob)
|
||||
{
|
||||
int ret;
|
||||
int oldState;
|
||||
int oldReason;
|
||||
qemuDomainObjPrivatePtr priv = vm->privateData;
|
||||
|
||||
VIR_FREE(priv->lockState);
|
||||
oldState = virDomainObjGetState(vm, &oldReason);
|
||||
virDomainObjSetState(vm, VIR_DOMAIN_PAUSED, reason);
|
||||
|
||||
ret = qemuDomainObjEnterMonitorAsync(driver, vm, asyncJob);
|
||||
if (ret == 0) {
|
||||
@ -2723,11 +2719,10 @@ int qemuProcessStopCPUs(struct qemud_driver *driver, virDomainObjPtr vm,
|
||||
}
|
||||
|
||||
if (ret == 0) {
|
||||
virDomainObjSetState(vm, VIR_DOMAIN_PAUSED, reason);
|
||||
if (virDomainLockProcessPause(driver->lockManager, vm, &priv->lockState) < 0)
|
||||
VIR_WARN("Unable to release lease on %s", vm->def->name);
|
||||
VIR_DEBUG("Preserving lock state '%s'", NULLSTR(priv->lockState));
|
||||
} else {
|
||||
virDomainObjSetState(vm, oldState, oldReason);
|
||||
}
|
||||
|
||||
return ret;
|
||||
|
Loading…
Reference in New Issue
Block a user