提交 728830be 编写于 作者: P Peter Krempa

qemu: blockjob: Convert qemuBlockJobSyncBeginDisk to work with the job

Modify qemuBlockJobSyncBeginDisk to operate on qemuBlockt sJobDataPtr and
rename it accordingly.
Signed-off-by: NPeter Krempa <pkrempa@redhat.com>
Reviewed-by: NJán Tomko <jtomko@redhat.com>
上级 0ba9afc6
...@@ -360,7 +360,8 @@ qemuBlockJobUpdateDisk(virDomainObjPtr vm, ...@@ -360,7 +360,8 @@ qemuBlockJobUpdateDisk(virDomainObjPtr vm,
/** /**
* qemuBlockJobSyncBeginDisk: * qemuBlockJobSyncBegin:
* @job: block job data
* @disk: domain disk * @disk: domain disk
* *
* Begin a new synchronous block job for @disk. The synchronous * Begin a new synchronous block job for @disk. The synchronous
...@@ -373,11 +374,14 @@ qemuBlockJobUpdateDisk(virDomainObjPtr vm, ...@@ -373,11 +374,14 @@ qemuBlockJobUpdateDisk(virDomainObjPtr vm,
* is called. * is called.
*/ */
void 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->synchronous = true;
job->newstate = -1; job->newstate = -1;
} }
......
...@@ -80,7 +80,7 @@ int qemuBlockJobUpdateDisk(virDomainObjPtr vm, ...@@ -80,7 +80,7 @@ int qemuBlockJobUpdateDisk(virDomainObjPtr vm,
virDomainDiskDefPtr disk, virDomainDiskDefPtr disk,
char **error); char **error);
void qemuBlockJobSyncBeginDisk(virDomainDiskDefPtr disk); void qemuBlockJobSyncBegin(qemuBlockJobDataPtr job);
void qemuBlockJobSyncEndDisk(virDomainObjPtr vm, void qemuBlockJobSyncEndDisk(virDomainObjPtr vm,
int asyncJob, int asyncJob,
virDomainDiskDefPtr disk); virDomainDiskDefPtr disk);
......
...@@ -17364,6 +17364,7 @@ qemuDomainBlockJobAbort(virDomainPtr dom, ...@@ -17364,6 +17364,7 @@ qemuDomainBlockJobAbort(virDomainPtr dom,
bool save = false; bool save = false;
bool pivot = !!(flags & VIR_DOMAIN_BLOCK_JOB_ABORT_PIVOT); bool pivot = !!(flags & VIR_DOMAIN_BLOCK_JOB_ABORT_PIVOT);
bool async = !!(flags & VIR_DOMAIN_BLOCK_JOB_ABORT_ASYNC); bool async = !!(flags & VIR_DOMAIN_BLOCK_JOB_ABORT_ASYNC);
qemuBlockJobDataPtr job = NULL;
virDomainObjPtr vm; virDomainObjPtr vm;
int ret = -1; int ret = -1;
...@@ -17391,6 +17392,12 @@ qemuDomainBlockJobAbort(virDomainPtr dom, ...@@ -17391,6 +17392,12 @@ qemuDomainBlockJobAbort(virDomainPtr dom,
if (!(device = qemuAliasDiskDriveFromDisk(disk))) if (!(device = qemuAliasDiskDriveFromDisk(disk)))
goto endjob; 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 && if (disk->mirrorState != VIR_DOMAIN_DISK_MIRROR_STATE_NONE &&
disk->mirrorState != VIR_DOMAIN_DISK_MIRROR_STATE_READY) { disk->mirrorState != VIR_DOMAIN_DISK_MIRROR_STATE_READY) {
virReportError(VIR_ERR_OPERATION_INVALID, virReportError(VIR_ERR_OPERATION_INVALID,
...@@ -17400,7 +17407,7 @@ qemuDomainBlockJobAbort(virDomainPtr dom, ...@@ -17400,7 +17407,7 @@ qemuDomainBlockJobAbort(virDomainPtr dom,
} }
if (!async) if (!async)
qemuBlockJobSyncBeginDisk(disk); qemuBlockJobSyncBegin(job);
if (pivot) { if (pivot) {
if ((ret = qemuDomainBlockPivot(driver, vm, device, disk)) < 0) if ((ret = qemuDomainBlockPivot(driver, vm, device, disk)) < 0)
...@@ -17455,6 +17462,7 @@ qemuDomainBlockJobAbort(virDomainPtr dom, ...@@ -17455,6 +17462,7 @@ qemuDomainBlockJobAbort(virDomainPtr dom,
qemuDomainObjEndJob(driver, vm); qemuDomainObjEndJob(driver, vm);
cleanup: cleanup:
virObjectUnref(job);
virObjectUnref(cfg); virObjectUnref(cfg);
VIR_FREE(device); VIR_FREE(device);
virDomainObjEndAPI(&vm); virDomainObjEndAPI(&vm);
......
...@@ -911,7 +911,7 @@ qemuMigrationSrcNBDStorageCopyOne(virQEMUDriverPtr driver, ...@@ -911,7 +911,7 @@ qemuMigrationSrcNBDStorageCopyOne(virQEMUDriverPtr driver,
if (!(job = qemuBlockJobDiskNew(disk, QEMU_BLOCKJOB_TYPE_COPY))) if (!(job = qemuBlockJobDiskNew(disk, QEMU_BLOCKJOB_TYPE_COPY)))
goto cleanup; goto cleanup;
qemuBlockJobSyncBeginDisk(disk); qemuBlockJobSyncBegin(job);
if (flags & VIR_MIGRATE_TLS) { if (flags & VIR_MIGRATE_TLS) {
rc = qemuMigrationSrcNBDStorageCopyBlockdev(driver, vm, rc = qemuMigrationSrcNBDStorageCopyBlockdev(driver, vm,
...@@ -5392,16 +5392,19 @@ qemuMigrationSrcCancel(virQEMUDriverPtr driver, ...@@ -5392,16 +5392,19 @@ qemuMigrationSrcCancel(virQEMUDriverPtr driver,
for (i = 0; i < vm->def->ndisks; i++) { for (i = 0; i < vm->def->ndisks; i++) {
virDomainDiskDefPtr disk = vm->def->disks[i]; virDomainDiskDefPtr disk = vm->def->disks[i];
qemuDomainDiskPrivatePtr diskPriv = QEMU_DOMAIN_DISK_PRIVATE(disk); qemuDomainDiskPrivatePtr diskPriv = QEMU_DOMAIN_DISK_PRIVATE(disk);
qemuBlockJobDataPtr job;
if (!diskPriv->blockjob->started) if (!(job = qemuBlockJobDiskGetJob(disk)) ||
!job->started)
diskPriv->migrating = false; diskPriv->migrating = false;
if (diskPriv->migrating) { if (diskPriv->migrating) {
qemuBlockJobSyncBeginDisk(disk); qemuBlockJobSyncBegin(job);
storage = true; storage = true;
} }
}
virObjectUnref(job);
}
if (storage && if (storage &&
qemuMigrationSrcNBDCopyCancel(driver, vm, false, qemuMigrationSrcNBDCopyCancel(driver, vm, false,
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册