Instead of passing in the disk information, pass in the job and name the
function accordingly.
Few callers needed to be modified to have the job pointer handy.
Signed-off-by: Peter Krempa <pkrempa(a)redhat.com>
---
src/qemu/qemu_blockjob.c | 20 ++++++++++++--------
src/qemu/qemu_blockjob.h | 6 +++---
src/qemu/qemu_driver.c | 6 +++---
src/qemu/qemu_migration.c | 40 +++++++++++++++++++++++++++------------
4 files changed, 46 insertions(+), 26 deletions(-)
diff --git a/src/qemu/qemu_blockjob.c b/src/qemu/qemu_blockjob.c
index 49e747ebbb..c1826baa3c 100644
--- a/src/qemu/qemu_blockjob.c
+++ b/src/qemu/qemu_blockjob.c
@@ -333,7 +333,7 @@ qemuBlockJobEventProcessLegacy(virQEMUDriverPtr driver,
/**
- * qemuBlockJobUpdateDisk:
+ * qemuBlockJobUpdate:
* @vm: domain
* @disk: domain disk
* @error: error (output parameter)
@@ -344,11 +344,10 @@ qemuBlockJobEventProcessLegacy(virQEMUDriverPtr driver,
* Returns the block job event processed or -1 if there was no pending event.
*/
int
-qemuBlockJobUpdateDisk(virDomainObjPtr vm,
- int asyncJob,
- virDomainDiskDefPtr disk)
+qemuBlockJobUpdate(virDomainObjPtr vm,
+ qemuBlockJobDataPtr job,
+ int asyncJob)
{
- qemuBlockJobDataPtr job = QEMU_DOMAIN_DISK_PRIVATE(disk)->blockjob;
qemuDomainObjPrivatePtr priv = vm->privateData;
if (job->newstate == -1)
@@ -370,7 +369,7 @@ qemuBlockJobUpdateDisk(virDomainObjPtr vm,
*
* During a synchronous block job, a block job event for @disk
* will not be processed asynchronously. Instead, it will be
- * processed only when qemuBlockJobUpdateDisk or qemuBlockJobSyncEndDisk
+ * processed only when qemuBlockJobUpdate or qemuBlockJobSyncEndDisk
* is called.
*/
void
@@ -402,7 +401,12 @@ qemuBlockJobSyncEndDisk(virDomainObjPtr vm,
int asyncJob,
virDomainDiskDefPtr disk)
{
+ qemuBlockJobDataPtr job = QEMU_DOMAIN_DISK_PRIVATE(disk)->blockjob;
+
+ if (!job)
+ return;
+
VIR_DEBUG("disk=%s", disk->dst);
- qemuBlockJobUpdateDisk(vm, asyncJob, disk);
- QEMU_DOMAIN_DISK_PRIVATE(disk)->blockjob->synchronous = false;
+ qemuBlockJobUpdate(vm, job, asyncJob);
+ job->synchronous = false;
}
diff --git a/src/qemu/qemu_blockjob.h b/src/qemu/qemu_blockjob.h
index 4527ee2a93..9dad47f732 100644
--- a/src/qemu/qemu_blockjob.h
+++ b/src/qemu/qemu_blockjob.h
@@ -95,9 +95,9 @@ qemuBlockJobIsRunning(qemuBlockJobDataPtr job)
void
qemuBlockJobStartupFinalize(qemuBlockJobDataPtr job);
-int qemuBlockJobUpdateDisk(virDomainObjPtr vm,
- int asyncJob,
- virDomainDiskDefPtr disk);
+int qemuBlockJobUpdate(virDomainObjPtr vm,
+ qemuBlockJobDataPtr job,
+ int asyncJob);
void qemuBlockJobSyncBegin(qemuBlockJobDataPtr job);
void qemuBlockJobSyncEndDisk(virDomainObjPtr vm,
diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c
index 2e47ec021a..4ffa5b573d 100644
--- a/src/qemu/qemu_driver.c
+++ b/src/qemu/qemu_driver.c
@@ -4739,7 +4739,7 @@ processBlockJobEvent(virQEMUDriverPtr driver,
job->newstate = status;
- qemuBlockJobUpdateDisk(vm, QEMU_ASYNC_JOB_NONE, disk);
+ qemuBlockJobUpdate(vm, job, QEMU_ASYNC_JOB_NONE);
endjob:
qemuBlockJobStartupFinalize(job);
@@ -17397,13 +17397,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);
+ qemuBlockJobUpdate(vm, job, QEMU_ASYNC_JOB_NONE);
while (qemuBlockJobIsRunning(job)) {
if (virDomainObjWait(vm) < 0) {
ret = -1;
goto endjob;
}
- qemuBlockJobUpdateDisk(vm, QEMU_ASYNC_JOB_NONE, disk);
+ qemuBlockJobUpdate(vm, job, QEMU_ASYNC_JOB_NONE);
}
}
diff --git a/src/qemu/qemu_migration.c b/src/qemu/qemu_migration.c
index ac3c609067..92fcfa6278 100644
--- a/src/qemu/qemu_migration.c
+++ b/src/qemu/qemu_migration.c
@@ -464,17 +464,16 @@ qemuMigrationDstStopNBDServer(virQEMUDriverPtr driver,
static void
-qemuMigrationNBDReportMirrorError(virDomainDiskDefPtr disk)
+qemuMigrationNBDReportMirrorError(qemuBlockJobDataPtr job,
+ const char *diskdst)
{
- qemuBlockJobDataPtr job = QEMU_DOMAIN_DISK_PRIVATE(disk)->blockjob;
-
if (job->errmsg) {
virReportError(VIR_ERR_OPERATION_FAILED,
_("migration of disk %s failed: %s"),
- disk->dst, job->errmsg);
+ diskdst, job->errmsg);
} else {
virReportError(VIR_ERR_OPERATION_FAILED,
- _("migration of disk %s failed"), disk->dst);
+ _("migration of disk %s failed"), diskdst);
}
}
@@ -501,16 +500,26 @@ qemuMigrationSrcNBDStorageCopyReady(virDomainObjPtr vm,
for (i = 0; i < vm->def->ndisks; i++) {
virDomainDiskDefPtr disk = vm->def->disks[i];
qemuDomainDiskPrivatePtr diskPriv = QEMU_DOMAIN_DISK_PRIVATE(disk);
+ qemuBlockJobDataPtr job;
if (!diskPriv->migrating)
continue;
- status = qemuBlockJobUpdateDisk(vm, asyncJob, disk);
+ if (!(job = qemuBlockJobDiskGetJob(disk))) {
+ virReportError(VIR_ERR_INTERNAL_ERROR,
+ _("missing block job data for disk '%s'"),
disk->dst);
+ return -1;
+ }
+
+ status = qemuBlockJobUpdate(vm, job, asyncJob);
if (status == VIR_DOMAIN_BLOCK_JOB_FAILED) {
- qemuMigrationNBDReportMirrorError(disk);
+ qemuMigrationNBDReportMirrorError(job, disk->dst);
+ virObjectUnref(job);
return -1;
}
+ virObjectUnref(job);
+
if (disk->mirrorState != VIR_DOMAIN_DISK_MIRROR_STATE_READY)
notReady++;
}
@@ -550,15 +559,19 @@ qemuMigrationSrcNBDCopyCancelled(virDomainObjPtr vm,
for (i = 0; i < vm->def->ndisks; i++) {
virDomainDiskDefPtr disk = vm->def->disks[i];
qemuDomainDiskPrivatePtr diskPriv = QEMU_DOMAIN_DISK_PRIVATE(disk);
+ qemuBlockJobDataPtr job;
if (!diskPriv->migrating)
continue;
- status = qemuBlockJobUpdateDisk(vm, asyncJob, disk);
+ if (!(job = qemuBlockJobDiskGetJob(disk)))
+ continue;
+
+ status = qemuBlockJobUpdate(vm, job, asyncJob);
switch (status) {
case VIR_DOMAIN_BLOCK_JOB_FAILED:
if (check) {
- qemuMigrationNBDReportMirrorError(disk);
+ qemuMigrationNBDReportMirrorError(job, disk->dst);
failed = true;
}
ATTRIBUTE_FALLTHROUGH;
@@ -574,6 +587,8 @@ qemuMigrationSrcNBDCopyCancelled(virDomainObjPtr vm,
if (status == VIR_DOMAIN_BLOCK_JOB_COMPLETED)
completed++;
+
+ virObjectUnref(job);
}
/* Updating completed block job drops the lock thus we have to recheck
@@ -616,6 +631,7 @@ static int
qemuMigrationSrcNBDCopyCancelOne(virQEMUDriverPtr driver,
virDomainObjPtr vm,
virDomainDiskDefPtr disk,
+ qemuBlockJobDataPtr job,
bool failNoJob,
qemuDomainAsyncJob asyncJob)
{
@@ -625,12 +641,12 @@ qemuMigrationSrcNBDCopyCancelOne(virQEMUDriverPtr driver,
int status;
int rv;
- status = qemuBlockJobUpdateDisk(vm, asyncJob, disk);
+ status = qemuBlockJobUpdate(vm, job, asyncJob);
switch (status) {
case VIR_DOMAIN_BLOCK_JOB_FAILED:
case VIR_DOMAIN_BLOCK_JOB_CANCELED:
if (failNoJob) {
- qemuMigrationNBDReportMirrorError(disk);
+ qemuMigrationNBDReportMirrorError(job, disk->dst);
goto cleanup;
}
ATTRIBUTE_FALLTHROUGH;
@@ -698,7 +714,7 @@ qemuMigrationSrcNBDCopyCancel(virQEMUDriverPtr driver,
if (!diskPriv->migrating)
continue;
- rv = qemuMigrationSrcNBDCopyCancelOne(driver, vm, disk,
+ rv = qemuMigrationSrcNBDCopyCancelOne(driver, vm, disk, job,
check, asyncJob);
if (rv != 0) {
if (rv < 0) {
--
2.19.2