]> xenbits.xensource.com Git - libvirt.git/commitdiff
qemu: blockjob: Convert qemuBlockJobSyncBeginDisk to work with the job
authorPeter Krempa <pkrempa@redhat.com>
Fri, 19 Oct 2018 07:14:54 +0000 (09:14 +0200)
committerPeter Krempa <pkrempa@redhat.com>
Thu, 17 Jan 2019 16:12:50 +0000 (17:12 +0100)
Modify qemuBlockJobSyncBeginDisk to operate on qemuBlockt sJobDataPtr and
rename it accordingly.

Signed-off-by: Peter Krempa <pkrempa@redhat.com>
Reviewed-by: Ján Tomko <jtomko@redhat.com>
src/qemu/qemu_blockjob.c
src/qemu/qemu_blockjob.h
src/qemu/qemu_driver.c
src/qemu/qemu_migration.c

index 7f9b3d48b1d3f303033c41323ee6765eff73861c..3890e4af95ac023597e98f963827589d7b4885a2 100644 (file)
@@ -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;
 }
index b45c938aa2f7f35cf879dd6fb6762b3ab669a5c2..d37a072aabdc3ccd006c39ddbf17f18a878697aa 100644 (file)
@@ -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);
index 4f46772f5dd6a8d8fcd60da212b91f20813e9253..a65f172ba29412b5d61150144ac4c8d7883ca01a 100644 (file)
@@ -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);
index e44654ecdfd000fb99398d750d2dd8a87066518d..bf1b6c5b5ade65baa99dd85b5e6a6f468c09a847 100644 (file)
@@ -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,