diff --git a/src/qemu/qemu_blockjob.c b/src/qemu/qemu_blockjob.c index ce4717a2d23e2da2bd191e7f046b54e97c08b578..7b9805641362fa43c3758cac8e54b3d83803a050 100644 --- a/src/qemu/qemu_blockjob.c +++ b/src/qemu/qemu_blockjob.c @@ -343,23 +343,15 @@ qemuBlockJobEventProcessLegacy(virQEMUDriverPtr driver, int qemuBlockJobUpdateDisk(virDomainObjPtr vm, int asyncJob, - virDomainDiskDefPtr disk, - char **error) + virDomainDiskDefPtr disk) { qemuBlockJobDataPtr job = QEMU_DOMAIN_DISK_PRIVATE(disk)->blockjob; qemuDomainObjPrivatePtr priv = vm->privateData; int state = job->newstate; - if (error) - *error = NULL; - if (state != -1) { qemuBlockJobEventProcessLegacy(priv->driver, vm, job, asyncJob); job->newstate = -1; - if (error) - VIR_STEAL_PTR(*error, job->errmsg); - else - VIR_FREE(job->errmsg); } return state; @@ -410,6 +402,6 @@ qemuBlockJobSyncEndDisk(virDomainObjPtr vm, virDomainDiskDefPtr disk) { VIR_DEBUG("disk=%s", disk->dst); - qemuBlockJobUpdateDisk(vm, asyncJob, disk, NULL); + qemuBlockJobUpdateDisk(vm, asyncJob, disk); QEMU_DOMAIN_DISK_PRIVATE(disk)->blockjob->synchronous = false; } diff --git a/src/qemu/qemu_blockjob.h b/src/qemu/qemu_blockjob.h index a6a2f8b7c7f09cba48b759cfe3e3414a0e8d1003..7c82c28768a760d9cd41824fe1deba7caf3136b6 100644 --- a/src/qemu/qemu_blockjob.h +++ b/src/qemu/qemu_blockjob.h @@ -98,8 +98,7 @@ qemuBlockJobStartupFinalize(qemuBlockJobDataPtr job); int qemuBlockJobUpdateDisk(virDomainObjPtr vm, int asyncJob, - virDomainDiskDefPtr disk, - char **error); + virDomainDiskDefPtr disk); void qemuBlockJobSyncBegin(qemuBlockJobDataPtr job); void qemuBlockJobSyncEndDisk(virDomainObjPtr vm, diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c index 2f78d1144d20e6c0faab9f0d79a1bd7f64d28552..df1a81f6991410a58c9613979492b13ed2b8d074 100644 --- a/src/qemu/qemu_driver.c +++ b/src/qemu/qemu_driver.c @@ -4740,7 +4740,7 @@ processBlockJobEvent(virQEMUDriverPtr driver, job->newstate = status; - qemuBlockJobUpdateDisk(vm, QEMU_ASYNC_JOB_NONE, disk, NULL); + qemuBlockJobUpdateDisk(vm, QEMU_ASYNC_JOB_NONE, disk); endjob: qemuBlockJobStartupFinalize(job); @@ -17445,13 +17445,13 @@ qemuDomainBlockJobAbort(virDomainPtr dom, * do the waiting while still holding the VM job, to prevent newly * scheduled block jobs from confusing us. */ if (!async) { - qemuBlockJobUpdateDisk(vm, QEMU_ASYNC_JOB_NONE, disk, NULL); + qemuBlockJobUpdateDisk(vm, QEMU_ASYNC_JOB_NONE, disk); while (qemuBlockJobIsRunning(job)) { if (virDomainObjWait(vm) < 0) { ret = -1; goto endjob; } - qemuBlockJobUpdateDisk(vm, QEMU_ASYNC_JOB_NONE, disk, NULL); + qemuBlockJobUpdateDisk(vm, QEMU_ASYNC_JOB_NONE, disk); } } diff --git a/src/qemu/qemu_migration.c b/src/qemu/qemu_migration.c index 97cb53fd651b9952cc7f6840683e6d0c26d62060..bf6209c15043d3b7938248ecf7fd62a4fa53bc1b 100644 --- a/src/qemu/qemu_migration.c +++ b/src/qemu/qemu_migration.c @@ -464,13 +464,14 @@ qemuMigrationDstStopNBDServer(virQEMUDriverPtr driver, static void -qemuMigrationNBDReportMirrorError(virDomainDiskDefPtr disk, - const char *errmsg) +qemuMigrationNBDReportMirrorError(virDomainDiskDefPtr disk) { - if (errmsg) { + qemuBlockJobDataPtr job = QEMU_DOMAIN_DISK_PRIVATE(disk)->blockjob; + + if (job->errmsg) { virReportError(VIR_ERR_OPERATION_FAILED, _("migration of disk %s failed: %s"), - disk->dst, errmsg); + disk->dst, job->errmsg); } else { virReportError(VIR_ERR_OPERATION_FAILED, _("migration of disk %s failed"), disk->dst); @@ -500,17 +501,15 @@ qemuMigrationSrcNBDStorageCopyReady(virDomainObjPtr vm, for (i = 0; i < vm->def->ndisks; i++) { virDomainDiskDefPtr disk = vm->def->disks[i]; qemuDomainDiskPrivatePtr diskPriv = QEMU_DOMAIN_DISK_PRIVATE(disk); - char *error = NULL; if (!diskPriv->migrating) continue; - status = qemuBlockJobUpdateDisk(vm, asyncJob, disk, &error); + status = qemuBlockJobUpdateDisk(vm, asyncJob, disk); if (status == VIR_DOMAIN_BLOCK_JOB_FAILED) { - qemuMigrationNBDReportMirrorError(disk, error); + qemuMigrationNBDReportMirrorError(disk); return -1; } - VIR_FREE(error); if (disk->mirrorState != VIR_DOMAIN_DISK_MIRROR_STATE_READY) notReady++; @@ -551,16 +550,15 @@ qemuMigrationSrcNBDCopyCancelled(virDomainObjPtr vm, for (i = 0; i < vm->def->ndisks; i++) { virDomainDiskDefPtr disk = vm->def->disks[i]; qemuDomainDiskPrivatePtr diskPriv = QEMU_DOMAIN_DISK_PRIVATE(disk); - char *error = NULL; if (!diskPriv->migrating) continue; - status = qemuBlockJobUpdateDisk(vm, asyncJob, disk, &error); + status = qemuBlockJobUpdateDisk(vm, asyncJob, disk); switch (status) { case VIR_DOMAIN_BLOCK_JOB_FAILED: if (check) { - qemuMigrationNBDReportMirrorError(disk, error); + qemuMigrationNBDReportMirrorError(disk); failed = true; } ATTRIBUTE_FALLTHROUGH; @@ -576,8 +574,6 @@ qemuMigrationSrcNBDCopyCancelled(virDomainObjPtr vm, if (status == VIR_DOMAIN_BLOCK_JOB_COMPLETED) completed++; - - VIR_FREE(error); } /* Updating completed block job drops the lock thus we have to recheck @@ -625,17 +621,16 @@ qemuMigrationSrcNBDCopyCancelOne(virQEMUDriverPtr driver, { qemuDomainObjPrivatePtr priv = vm->privateData; char *diskAlias = NULL; - char *error = NULL; int ret = -1; int status; int rv; - status = qemuBlockJobUpdateDisk(vm, asyncJob, disk, &error); + status = qemuBlockJobUpdateDisk(vm, asyncJob, disk); switch (status) { case VIR_DOMAIN_BLOCK_JOB_FAILED: case VIR_DOMAIN_BLOCK_JOB_CANCELED: if (failNoJob) { - qemuMigrationNBDReportMirrorError(disk, error); + qemuMigrationNBDReportMirrorError(disk); goto cleanup; } ATTRIBUTE_FALLTHROUGH; @@ -659,7 +654,6 @@ qemuMigrationSrcNBDCopyCancelOne(virQEMUDriverPtr driver, cleanup: VIR_FREE(diskAlias); - VIR_FREE(error); return ret; }