1
0
mirror of https://gitlab.com/libvirt/libvirt.git synced 2025-03-13 08:58:33 +03:00

qemu: driver: Save status XML when starting a block job

Few jobs (which don't) use the 'mirror' element did not save the status
XML. It will be helpful to do so once we start tracking jobs fully.
This commit is contained in:
Peter Krempa 2017-09-27 17:50:31 +02:00
parent d39173ff7a
commit cb1e4ca203

View File

@ -16483,6 +16483,7 @@ qemuDomainBlockPullCommon(virQEMUDriverPtr driver,
unsigned int flags)
{
qemuDomainObjPrivatePtr priv = vm->privateData;
virQEMUDriverConfigPtr cfg = virQEMUDriverGetConfig(driver);
char *device = NULL;
virDomainDiskDefPtr disk;
virStorageSourcePtr baseSource = NULL;
@ -16574,10 +16575,15 @@ qemuDomainBlockPullCommon(virQEMUDriverPtr driver,
QEMU_DOMAIN_DISK_PRIVATE(disk)->blockjob = true;
if (virDomainSaveStatus(driver->xmlopt, cfg->stateDir, vm, driver->caps) < 0)
VIR_WARN("Unable to save status on vm %s after state change",
vm->def->name);
endjob:
qemuDomainObjEndJob(driver, vm);
cleanup:
virObjectUnref(cfg);
VIR_FREE(basePath);
VIR_FREE(backingPath);
VIR_FREE(device);
@ -17305,6 +17311,7 @@ qemuDomainBlockCommit(virDomainPtr dom,
unsigned int flags)
{
virQEMUDriverPtr driver = dom->conn->privateData;
virQEMUDriverConfigPtr cfg = NULL;
qemuDomainObjPrivatePtr priv;
virDomainObjPtr vm = NULL;
char *device = NULL;
@ -17331,6 +17338,7 @@ qemuDomainBlockCommit(virDomainPtr dom,
if (!(vm = qemuDomObjFromDomain(dom)))
goto cleanup;
priv = vm->privateData;
cfg = virQEMUDriverGetConfig(driver);
if (virDomainBlockCommitEnsureACL(dom->conn, vm->def) < 0)
goto cleanup;
@ -17497,24 +17505,18 @@ qemuDomainBlockCommit(virDomainPtr dom,
goto endjob;
}
if (ret == 0)
if (ret == 0) {
QEMU_DOMAIN_DISK_PRIVATE(disk)->blockjob = true;
if (mirror) {
if (ret == 0) {
virQEMUDriverConfigPtr cfg = virQEMUDriverGetConfig(driver);
mirror = NULL;
if (virDomainSaveStatus(driver->xmlopt, cfg->stateDir, vm, driver->caps) < 0)
VIR_WARN("Unable to save status on vm %s after block job",
vm->def->name);
virObjectUnref(cfg);
} else {
disk->mirror = NULL;
disk->mirrorJob = VIR_DOMAIN_BLOCK_JOB_TYPE_UNKNOWN;
}
mirror = NULL;
} else {
disk->mirror = NULL;
disk->mirrorJob = VIR_DOMAIN_BLOCK_JOB_TYPE_UNKNOWN;
}
if (virDomainSaveStatus(driver->xmlopt, cfg->stateDir, vm, driver->caps) < 0)
VIR_WARN("Unable to save status on vm %s after block job",
vm->def->name);
endjob:
if (ret < 0 && clean_access) {
virErrorPtr orig_err = virSaveLastError();
@ -17536,6 +17538,7 @@ qemuDomainBlockCommit(virDomainPtr dom,
VIR_FREE(basePath);
VIR_FREE(backingPath);
VIR_FREE(device);
virObjectUnref(cfg);
virDomainObjEndAPI(&vm);
return ret;
}