[libvirt] [PATCH RFC 26/51] qemu: blockjob: Remove error propagation from qemuBlockJobUpdateDisk

Peter Krempa pkrempa at redhat.com
Wed Dec 12 17:08:42 UTC 2018


The job error can be safely accessed in the job structure, so we don't
need to propagate it through qemuBlockJobUpdateDisk.

Drop the propagation and refactor any caller that pased non-NULL error.

Signed-off-by: Peter Krempa <pkrempa at redhat.com>
---
 src/qemu/qemu_blockjob.c  | 12 ++----------
 src/qemu/qemu_blockjob.h  |  3 +--
 src/qemu/qemu_driver.c    |  6 +++---
 src/qemu/qemu_migration.c | 28 +++++++++++-----------------
 4 files changed, 17 insertions(+), 32 deletions(-)

diff --git a/src/qemu/qemu_blockjob.c b/src/qemu/qemu_blockjob.c
index e778e5b7ce..7aaa439791 100644
--- a/src/qemu/qemu_blockjob.c
+++ b/src/qemu/qemu_blockjob.c
@@ -342,23 +342,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;
@@ -408,6 +400,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 67b9c94b64..4527ee2a93 100644
--- a/src/qemu/qemu_blockjob.h
+++ b/src/qemu/qemu_blockjob.h
@@ -97,8 +97,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 f203f89521..2e47ec021a 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, NULL);
+    qemuBlockJobUpdateDisk(vm, QEMU_ASYNC_JOB_NONE, disk);

  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, 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 1ce7863460..ac3c609067 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;
 }

-- 
2.19.2




More information about the libvir-list mailing list