Introduce the bare necessities to add privateData to _virStorageSource.
Subsequent patches will fill in more details.

Signed-off-by: John Ferlan <jfer...@redhat.com>
---
 src/conf/domain_conf.h    |  1 +
 src/qemu/qemu_domain.c    | 43 +++++++++++++++++++++++++++++++++++++++++++
 src/qemu/qemu_domain.h    | 13 +++++++++++++
 src/util/virstoragefile.c |  1 +
 src/util/virstoragefile.h |  3 +++
 5 files changed, 61 insertions(+)

diff --git a/src/conf/domain_conf.h b/src/conf/domain_conf.h
index a42efcfa68..ca334e0147 100644
--- a/src/conf/domain_conf.h
+++ b/src/conf/domain_conf.h
@@ -2621,6 +2621,7 @@ struct _virDomainXMLPrivateDataCallbacks {
     /* note that private data for devices are not copied when using
      * virDomainDefCopy and similar functions */
     virDomainXMLPrivateDataNewFunc    diskNew;
+    virDomainXMLPrivateDataNewFunc    diskSrcNew;
     virDomainXMLPrivateDataNewFunc    hostdevNew;
     virDomainXMLPrivateDataNewFunc    vcpuNew;
     virDomainXMLPrivateDataNewFunc    chrSourceNew;
diff --git a/src/qemu/qemu_domain.c b/src/qemu/qemu_domain.c
index 2bcc9839d1..e8e7b31ff0 100644
--- a/src/qemu/qemu_domain.c
+++ b/src/qemu/qemu_domain.c
@@ -926,6 +926,48 @@ qemuDomainDiskPrivateDispose(void *obj)
 }
 
 
+static virClassPtr qemuDomainDiskSrcPrivateClass;
+static void qemuDomainDiskSrcPrivateDispose(void *obj);
+
+static int
+qemuDomainDiskSrcPrivateOnceInit(void)
+{
+    qemuDomainDiskSrcPrivateClass = virClassNew(virClassForObject(),
+                                                "qemuDomainDiskSrcPrivate",
+                                                
sizeof(qemuDomainDiskSrcPrivate),
+                                                
qemuDomainDiskSrcPrivateDispose);
+    if (!qemuDomainDiskSrcPrivateClass)
+        return -1;
+    else
+        return 0;
+}
+
+VIR_ONCE_GLOBAL_INIT(qemuDomainDiskSrcPrivate)
+
+static virObjectPtr
+qemuDomainDiskSrcPrivateNew(void)
+{
+    qemuDomainDiskSrcPrivatePtr priv;
+
+    if (qemuDomainDiskSrcPrivateInitialize() < 0)
+        return NULL;
+
+    if (!(priv = virObjectNew(qemuDomainDiskSrcPrivateClass)))
+        return NULL;
+
+    return (virObjectPtr) priv;
+}
+
+
+static void
+qemuDomainDiskSrcPrivateDispose(void *obj)
+{
+    qemuDomainDiskSrcPrivatePtr priv = obj;
+
+    qemuDomainSecretInfoFree(&priv->secinfo);
+}
+
+
 static virClassPtr qemuDomainHostdevPrivateClass;
 static void qemuDomainHostdevPrivateDispose(void *obj);
 
@@ -2302,6 +2344,7 @@ virDomainXMLPrivateDataCallbacks 
virQEMUDriverPrivateDataCallbacks = {
     .alloc = qemuDomainObjPrivateAlloc,
     .free = qemuDomainObjPrivateFree,
     .diskNew = qemuDomainDiskPrivateNew,
+    .diskSrcNew = qemuDomainDiskSrcPrivateNew,
     .vcpuNew = qemuDomainVcpuPrivateNew,
     .hostdevNew = qemuDomainHostdevPrivateNew,
     .chrSourceNew = qemuDomainChrSourcePrivateNew,
diff --git a/src/qemu/qemu_domain.h b/src/qemu/qemu_domain.h
index f92841ceb9..aba70f4030 100644
--- a/src/qemu/qemu_domain.h
+++ b/src/qemu/qemu_domain.h
@@ -359,6 +359,19 @@ struct _qemuDomainDiskPrivate {
     bool removable; /* device media can be removed/changed */
 };
 
+# define QEMU_DOMAIN_DISK_SRC_PRIVATE(src) \
+    ((qemuDomainDiskSrcPrivatePtr) (src)->privateData)
+
+typedef struct _qemuDomainDiskSrcPrivate qemuDomainDiskSrcPrivate;
+typedef qemuDomainDiskSrcPrivate *qemuDomainDiskSrcPrivatePtr;
+struct _qemuDomainDiskSrcPrivate {
+    virObject parent;
+
+    /* for each storage source using auth/secret
+     * NB: *not* to be written to qemu domain object XML */
+    qemuDomainSecretInfoPtr secinfo;
+};
+
 # define QEMU_DOMAIN_HOSTDEV_PRIVATE(hostdev)  \
     ((qemuDomainHostdevPrivatePtr) (hostdev)->privateData)
 
diff --git a/src/util/virstoragefile.c b/src/util/virstoragefile.c
index 727ec52856..5e45cb3a27 100644
--- a/src/util/virstoragefile.c
+++ b/src/util/virstoragefile.c
@@ -2276,6 +2276,7 @@ virStorageSourceClear(virStorageSourcePtr def)
 
     virStorageNetHostDefFree(def->nhosts, def->hosts);
     virStorageAuthDefFree(def->auth);
+    virObjectUnref(def->privateData);
 
     VIR_FREE(def->nodestorage);
     VIR_FREE(def->nodeformat);
diff --git a/src/util/virstoragefile.h b/src/util/virstoragefile.h
index c8bb1066fe..5673a3f77d 100644
--- a/src/util/virstoragefile.h
+++ b/src/util/virstoragefile.h
@@ -27,6 +27,7 @@
 # include <sys/stat.h>
 
 # include "virbitmap.h"
+# include "virobject.h"
 # include "virseclabel.h"
 # include "virstorageencryption.h"
 # include "virutil.h"
@@ -241,6 +242,8 @@ struct _virStorageSource {
     bool authDefined;
     virStorageEncryptionPtr encryption;
 
+    virObjectPtr privateData; /* Usable to store hypervisor specific data */
+
     char *driverName;
     int format; /* virStorageFileFormat in domain backing chains, but
                  * pool-specific enum for storage volumes */
-- 
2.13.6

--
libvir-list mailing list
libvir-list@redhat.com
https://www.redhat.com/mailman/listinfo/libvir-list

Reply via email to