From 728830be9be27a7f167962d86aef2c3a7784fc3e Mon Sep 17 00:00:00 2001 From: Peter Krempa Date: Fri, 19 Oct 2018 09:14:54 +0200 Subject: [PATCH] qemu: blockjob: Convert qemuBlockJobSyncBeginDisk to work with the job MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Modify qemuBlockJobSyncBeginDisk to operate on qemuBlockt sJobDataPtr and rename it accordingly. Signed-off-by: Peter Krempa Reviewed-by: Ján Tomko --- src/qemu/qemu_blockjob.c | 12 ++++++++---- src/qemu/qemu_blockjob.h | 2 +- src/qemu/qemu_driver.c | 10 +++++++++- src/qemu/qemu_migration.c | 11 +++++++---- 4 files changed, 25 insertions(+), 10 deletions(-) diff --git a/src/qemu/qemu_blockjob.c b/src/qemu/qemu_blockjob.c index 7f9b3d48b1..3890e4af95 100644 --- a/src/qemu/qemu_blockjob.c +++ b/src/qemu/qemu_blockjob.c @@ -360,7 +360,8 @@ qemuBlockJobUpdateDisk(virDomainObjPtr vm, /** - * qemuBlockJobSyncBeginDisk: + * qemuBlockJobSyncBegin: + * @job: block job data * @disk: domain disk * * Begin a new synchronous block job for @disk. The synchronous @@ -373,11 +374,14 @@ qemuBlockJobUpdateDisk(virDomainObjPtr vm, * is called. */ void -qemuBlockJobSyncBeginDisk(virDomainDiskDefPtr disk) +qemuBlockJobSyncBegin(qemuBlockJobDataPtr job) { - qemuBlockJobDataPtr job = QEMU_DOMAIN_DISK_PRIVATE(disk)->blockjob; + const char *diskdst = NULL; - VIR_DEBUG("disk=%s", disk->dst); + if (job->disk) + diskdst = job->disk->dst; + + VIR_DEBUG("disk=%s", NULLSTR(diskdst)); job->synchronous = true; job->newstate = -1; } diff --git a/src/qemu/qemu_blockjob.h b/src/qemu/qemu_blockjob.h index b45c938aa2..d37a072aab 100644 --- a/src/qemu/qemu_blockjob.h +++ b/src/qemu/qemu_blockjob.h @@ -80,7 +80,7 @@ int qemuBlockJobUpdateDisk(virDomainObjPtr vm, virDomainDiskDefPtr disk, char **error); -void qemuBlockJobSyncBeginDisk(virDomainDiskDefPtr disk); +void qemuBlockJobSyncBegin(qemuBlockJobDataPtr job); void qemuBlockJobSyncEndDisk(virDomainObjPtr vm, int asyncJob, virDomainDiskDefPtr disk); diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c index 4f46772f5d..a65f172ba2 100644 --- a/src/qemu/qemu_driver.c +++ b/src/qemu/qemu_driver.c @@ -17364,6 +17364,7 @@ qemuDomainBlockJobAbort(virDomainPtr dom, bool save = false; bool pivot = !!(flags & VIR_DOMAIN_BLOCK_JOB_ABORT_PIVOT); bool async = !!(flags & VIR_DOMAIN_BLOCK_JOB_ABORT_ASYNC); + qemuBlockJobDataPtr job = NULL; virDomainObjPtr vm; int ret = -1; @@ -17391,6 +17392,12 @@ qemuDomainBlockJobAbort(virDomainPtr dom, if (!(device = qemuAliasDiskDriveFromDisk(disk))) goto endjob; + if (!(job = qemuBlockJobDiskGetJob(disk))) { + virReportError(VIR_ERR_INVALID_ARG, + _("disk %s does not have an active block job"), disk->dst); + goto endjob; + } + if (disk->mirrorState != VIR_DOMAIN_DISK_MIRROR_STATE_NONE && disk->mirrorState != VIR_DOMAIN_DISK_MIRROR_STATE_READY) { virReportError(VIR_ERR_OPERATION_INVALID, @@ -17400,7 +17407,7 @@ qemuDomainBlockJobAbort(virDomainPtr dom, } if (!async) - qemuBlockJobSyncBeginDisk(disk); + qemuBlockJobSyncBegin(job); if (pivot) { if ((ret = qemuDomainBlockPivot(driver, vm, device, disk)) < 0) @@ -17455,6 +17462,7 @@ qemuDomainBlockJobAbort(virDomainPtr dom, qemuDomainObjEndJob(driver, vm); cleanup: + virObjectUnref(job); virObjectUnref(cfg); VIR_FREE(device); virDomainObjEndAPI(&vm); diff --git a/src/qemu/qemu_migration.c b/src/qemu/qemu_migration.c index e44654ecdf..bf1b6c5b5a 100644 --- a/src/qemu/qemu_migration.c +++ b/src/qemu/qemu_migration.c @@ -911,7 +911,7 @@ qemuMigrationSrcNBDStorageCopyOne(virQEMUDriverPtr driver, if (!(job = qemuBlockJobDiskNew(disk, QEMU_BLOCKJOB_TYPE_COPY))) goto cleanup; - qemuBlockJobSyncBeginDisk(disk); + qemuBlockJobSyncBegin(job); if (flags & VIR_MIGRATE_TLS) { rc = qemuMigrationSrcNBDStorageCopyBlockdev(driver, vm, @@ -5392,16 +5392,19 @@ qemuMigrationSrcCancel(virQEMUDriverPtr driver, 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->blockjob->started) + if (!(job = qemuBlockJobDiskGetJob(disk)) || + !job->started) diskPriv->migrating = false; if (diskPriv->migrating) { - qemuBlockJobSyncBeginDisk(disk); + qemuBlockJobSyncBegin(job); storage = true; } - } + virObjectUnref(job); + } if (storage && qemuMigrationSrcNBDCopyCancel(driver, vm, false, -- GitLab