mirror of
https://gitlab.com/libvirt/libvirt.git
synced 2025-03-07 17:28:15 +00:00
qemu: hotplug: Don't save status XML when monitor is closed
In the vcpu hotplug code if exit from the monitor failed we would still attempt to save the status XML. When the daemon is terminated the monitor socket is closed. In such case, the written status XML would not contain the monitor path and thus be invalid. Avoid this issue by only saving status XML on success of the monitor command. Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=1439452
This commit is contained in:
parent
f24dc5e2c2
commit
355f5ab998
@ -5386,6 +5386,7 @@ qemuDomainRemoveVcpuAlias(virQEMUDriverPtr driver,
|
||||
|
||||
static int
|
||||
qemuDomainHotplugDelVcpu(virQEMUDriverPtr driver,
|
||||
virQEMUDriverConfigPtr cfg,
|
||||
virDomainObjPtr vm,
|
||||
unsigned int vcpu)
|
||||
{
|
||||
@ -5427,6 +5428,11 @@ qemuDomainHotplugDelVcpu(virQEMUDriverPtr driver,
|
||||
if (qemuDomainRemoveVcpu(driver, vm, vcpu) < 0)
|
||||
goto cleanup;
|
||||
|
||||
qemuDomainVcpuPersistOrder(vm->def);
|
||||
|
||||
if (virDomainSaveStatus(driver->xmlopt, cfg->stateDir, vm, driver->caps) < 0)
|
||||
goto cleanup;
|
||||
|
||||
ret = 0;
|
||||
|
||||
cleanup:
|
||||
@ -5437,6 +5443,7 @@ qemuDomainHotplugDelVcpu(virQEMUDriverPtr driver,
|
||||
|
||||
static int
|
||||
qemuDomainHotplugAddVcpu(virQEMUDriverPtr driver,
|
||||
virQEMUDriverConfigPtr cfg,
|
||||
virDomainObjPtr vm,
|
||||
unsigned int vcpu)
|
||||
{
|
||||
@ -5497,6 +5504,11 @@ qemuDomainHotplugAddVcpu(virQEMUDriverPtr driver,
|
||||
if (qemuDomainValidateVcpuInfo(vm) < 0)
|
||||
goto cleanup;
|
||||
|
||||
qemuDomainVcpuPersistOrder(vm->def);
|
||||
|
||||
if (virDomainSaveStatus(driver->xmlopt, cfg->stateDir, vm, driver->caps) < 0)
|
||||
goto cleanup;
|
||||
|
||||
ret = 0;
|
||||
|
||||
cleanup:
|
||||
@ -5611,7 +5623,6 @@ qemuDomainSetVcpusLive(virQEMUDriverPtr driver,
|
||||
qemuDomainObjPrivatePtr priv = vm->privateData;
|
||||
qemuCgroupEmulatorAllNodesDataPtr emulatorCgroup = NULL;
|
||||
ssize_t nextvcpu = -1;
|
||||
int rc = 0;
|
||||
int ret = -1;
|
||||
|
||||
if (qemuCgroupEmulatorAllNodesAllow(priv->cgroup, &emulatorCgroup) < 0)
|
||||
@ -5619,27 +5630,19 @@ qemuDomainSetVcpusLive(virQEMUDriverPtr driver,
|
||||
|
||||
if (enable) {
|
||||
while ((nextvcpu = virBitmapNextSetBit(vcpumap, nextvcpu)) != -1) {
|
||||
if ((rc = qemuDomainHotplugAddVcpu(driver, vm, nextvcpu)) < 0)
|
||||
break;
|
||||
if (qemuDomainHotplugAddVcpu(driver, cfg, vm, nextvcpu) < 0)
|
||||
goto cleanup;
|
||||
}
|
||||
} else {
|
||||
for (nextvcpu = virDomainDefGetVcpusMax(vm->def) - 1; nextvcpu >= 0; nextvcpu--) {
|
||||
if (!virBitmapIsBitSet(vcpumap, nextvcpu))
|
||||
continue;
|
||||
|
||||
if ((rc = qemuDomainHotplugDelVcpu(driver, vm, nextvcpu)) < 0)
|
||||
break;
|
||||
if (qemuDomainHotplugDelVcpu(driver, cfg, vm, nextvcpu) < 0)
|
||||
goto cleanup;
|
||||
}
|
||||
}
|
||||
|
||||
qemuDomainVcpuPersistOrder(vm->def);
|
||||
|
||||
if (virDomainSaveStatus(driver->xmlopt, cfg->stateDir, vm, driver->caps) < 0)
|
||||
goto cleanup;
|
||||
|
||||
if (rc < 0)
|
||||
goto cleanup;
|
||||
|
||||
ret = 0;
|
||||
|
||||
cleanup:
|
||||
|
Loading…
x
Reference in New Issue
Block a user