]> xenbits.xensource.com Git - libvirt.git/commitdiff
qemu: blockjob: Add job name into the data
authorPeter Krempa <pkrempa@redhat.com>
Thu, 17 Jan 2019 16:01:55 +0000 (17:01 +0100)
committerPeter Krempa <pkrempa@redhat.com>
Thu, 17 Jan 2019 16:12:51 +0000 (17:12 +0100)
Currently the job name corresponds to the disk the job belongs to. For
jobs which will not correspond to disks we'll need to track the name
separately.

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
src/qemu/qemu_process.c

index c75396bec70617388547d618d2141d4b74f9a768..9b638b7ef6e2db3d1f7c60f83cd51f1ddd0e581a 100644 (file)
@@ -36,6 +36,7 @@
 #include "virtime.h"
 #include "locking/domain_lock.h"
 #include "viralloc.h"
+#include "virstring.h"
 
 #define VIR_FROM_THIS VIR_FROM_QEMU
 
@@ -50,6 +51,7 @@ qemuBlockJobDataDispose(void *obj)
 {
     qemuBlockJobDataPtr job = obj;
 
+    VIR_FREE(job->name);
     VIR_FREE(job->errmsg);
 }
 
@@ -67,9 +69,11 @@ qemuBlockJobDataOnceInit(void)
 VIR_ONCE_GLOBAL_INIT(qemuBlockJobData)
 
 static qemuBlockJobDataPtr
-qemuBlockJobDataNew(qemuBlockJobType type)
+qemuBlockJobDataNew(qemuBlockJobType type,
+                    const char *name)
 {
     qemuBlockJobDataPtr job = NULL;
+    qemuBlockJobDataPtr ret = NULL;
 
     if (qemuBlockJobDataInitialize() < 0)
         return NULL;
@@ -77,11 +81,18 @@ qemuBlockJobDataNew(qemuBlockJobType type)
     if (!(job = virObjectNew(qemuBlockJobDataClass)))
         return NULL;
 
+    if (VIR_STRDUP(job->name, name) < 0)
+        goto cleanup;
+
     job->state = QEMU_BLOCKJOB_STATE_NEW;
     job->newstate = -1;
     job->type = type;
 
-    return job;
+    VIR_STEAL_PTR(ret, job);
+
+ cleanup:
+    virObjectUnref(job);
+    return ret;
 }
 
 
@@ -95,11 +106,12 @@ qemuBlockJobDataNew(qemuBlockJobType type)
  */
 qemuBlockJobDataPtr
 qemuBlockJobDiskNew(virDomainDiskDefPtr disk,
-                    qemuBlockJobType type)
+                    qemuBlockJobType type,
+                    const char *jobname)
 {
     qemuBlockJobDataPtr job = NULL;
 
-    if (!(job = qemuBlockJobDataNew(type)))
+    if (!(job = qemuBlockJobDataNew(type, jobname)))
         return NULL;
 
     job->disk = disk;
index f20346ebffdc1b2f80ce04f045580662ef3cd8c5..ed63f2c709661fde395fd98fac5d0abc259e9799 100644 (file)
@@ -63,6 +63,8 @@ typedef qemuBlockJobData *qemuBlockJobDataPtr;
 struct _qemuBlockJobData {
     virObject parent;
 
+    char *name;
+
     virDomainDiskDefPtr disk; /* may be NULL, if blockjob does not correspond to any disk */
 
     bool started;
@@ -77,8 +79,9 @@ struct _qemuBlockJobData {
 
 qemuBlockJobDataPtr
 qemuBlockJobDiskNew(virDomainDiskDefPtr disk,
-                    qemuBlockJobType type)
-    ATTRIBUTE_NONNULL(1);
+                    qemuBlockJobType type,
+                    const char *jobname)
+    ATTRIBUTE_NONNULL(1) ATTRIBUTE_NONNULL(3);
 
 qemuBlockJobDataPtr
 qemuBlockJobDiskGetJob(virDomainDiskDefPtr disk)
index ee64f0ce0a0a00bdfaf2d52e230f9fdbc2d95db3..90319261ff348c2ec2fd1097d0f5ac8fb0192e65 100644 (file)
@@ -4733,7 +4733,7 @@ processBlockJobEvent(virQEMUDriverPtr driver,
     }
 
     if (!(job = qemuBlockJobDiskGetJob(disk))) {
-        if (!(job = qemuBlockJobDiskNew(disk, type)))
+        if (!(job = qemuBlockJobDiskNew(disk, type, diskAlias)))
             goto endjob;
         qemuBlockJobStarted(job);
     }
@@ -17316,7 +17316,7 @@ qemuDomainBlockPullCommon(virQEMUDriverPtr driver,
         speed <<= 20;
     }
 
-    if (!(job = qemuBlockJobDiskNew(disk, QEMU_BLOCKJOB_TYPE_PULL)))
+    if (!(job = qemuBlockJobDiskNew(disk, QEMU_BLOCKJOB_TYPE_PULL, device)))
         goto endjob;
 
     qemuDomainObjEnterMonitor(driver, vm);
@@ -17851,7 +17851,7 @@ qemuDomainBlockCopyCommon(virDomainObjPtr vm,
         goto endjob;
     }
 
-    if (!(job = qemuBlockJobDiskNew(disk, QEMU_BLOCKJOB_TYPE_COPY)))
+    if (!(job = qemuBlockJobDiskNew(disk, QEMU_BLOCKJOB_TYPE_COPY, device)))
         goto endjob;
 
     /* Actually start the mirroring */
@@ -18265,7 +18265,7 @@ qemuDomainBlockCommit(virDomainPtr dom,
         jobtype = QEMU_BLOCKJOB_TYPE_ACTIVE_COMMIT;
     }
 
-    if (!(job = qemuBlockJobDiskNew(disk, jobtype)))
+    if (!(job = qemuBlockJobDiskNew(disk, jobtype, device)))
         goto endjob;
 
     qemuDomainObjEnterMonitor(driver, vm);
index ac4e6ca5103133a3b47d9de5ed2eae71f827e18b..950d9cd615bac566fdf389d4f10308b30973ccc4 100644 (file)
@@ -916,7 +916,7 @@ qemuMigrationSrcNBDStorageCopyOne(virQEMUDriverPtr driver,
     if (!(diskAlias = qemuAliasDiskDriveFromDisk(disk)))
         goto cleanup;
 
-    if (!(job = qemuBlockJobDiskNew(disk, QEMU_BLOCKJOB_TYPE_COPY)))
+    if (!(job = qemuBlockJobDiskNew(disk, QEMU_BLOCKJOB_TYPE_COPY, diskAlias)))
         goto cleanup;
 
     qemuBlockJobSyncBegin(job);
index 45870399769492ef6d3148916f810c100d7d3da2..afa960a683d42fb5b933c66f229c0b38a3801957 100644 (file)
@@ -7839,7 +7839,7 @@ qemuProcessRefreshLegacyBlockjob(void *payload,
         disk->mirrorJob == VIR_DOMAIN_BLOCK_JOB_TYPE_ACTIVE_COMMIT)
         jobtype = disk->mirrorJob;
 
-    if (!(job = qemuBlockJobDiskNew(disk, jobtype)))
+    if (!(job = qemuBlockJobDiskNew(disk, jobtype, jobname)))
         return -1;
 
     qemuBlockJobStarted(job);