]> git.ipfire.org Git - thirdparty/libvirt.git/commitdiff
qemu: domain: Add global table of blockjobs
authorPeter Krempa <pkrempa@redhat.com>
Thu, 29 Nov 2018 11:50:09 +0000 (12:50 +0100)
committerPeter Krempa <pkrempa@redhat.com>
Thu, 18 Jul 2019 15:59:34 +0000 (17:59 +0200)
Block jobs currently belong to disks only so we can look up the block
job data for them in the corresponding disks. This won't be the case
when using blockdev as certain jobs don't even correspond to a disk and
most of them can run on a part of the backing chain.

Add a global table of blockjobs which can be used to look up the data
for the blockjobs when the job events need to be processed.

The table is a hash table organized by job name and has a reference to
the job. New and running jobs will later be added to this table.
Reference counting will allow to reap job state for synchronous callers.

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

index 56a82df0503cdc9166e793b793498d5ef11b5012..af0f856b7814036274da8baf1fa944c837902fb4 100644 (file)
@@ -1975,6 +1975,9 @@ qemuDomainObjPrivateAlloc(void *opaque)
     if (!(priv->devs = virChrdevAlloc()))
         goto error;
 
+    if (!(priv->blockjobs = virHashCreate(5, virObjectFreeHashData)))
+        goto error;
+
     priv->migMaxBandwidth = QEMU_DOMAIN_MIG_BANDWIDTH_MAX;
     priv->driver = opaque;
 
@@ -2044,6 +2047,8 @@ qemuDomainObjPrivateDataClear(qemuDomainObjPrivatePtr priv)
 
     qemuDomainObjResetJob(priv);
     qemuDomainObjResetAsyncJob(priv);
+
+    virHashRemoveAll(priv->blockjobs);
 }
 
 
@@ -2075,6 +2080,8 @@ qemuDomainObjPrivateFree(void *data)
     qemuDomainSecretInfoFree(&priv->migSecinfo);
     qemuDomainMasterKeyFree(priv);
 
+    virHashFree(priv->blockjobs);
+
     VIR_FREE(priv);
 }
 
index 5a4188ab651136a1854a0d445a14b9929eb7cf42..6bf8af661d9ef13972da7f494d30627d34ab9449 100644 (file)
@@ -389,6 +389,9 @@ struct _qemuDomainObjPrivate {
 
     /* true if global -mem-prealloc appears on cmd line */
     bool memPrealloc;
+
+    /* running block jobs */
+    virHashTablePtr blockjobs;
 };
 
 #define QEMU_DOMAIN_PRIVATE(vm) \