]> git.ipfire.org Git - thirdparty/libvirt.git/commitdiff
conf: add data-file feature and related fields to virStorageSource
authorNikolai Barybin <nikolai.barybin@virtuozzo.com>
Wed, 20 Nov 2024 15:48:36 +0000 (18:48 +0300)
committerPeter Krempa <pkrempa@redhat.com>
Mon, 25 Nov 2024 19:28:15 +0000 (20:28 +0100)
The 'data-file' is a qcow2 feature which allows storing the actual data
outside of the qcow2 image.

Signed-off-by: Nikolai Barybin <nikolai.barybin@virtuozzo.com>
Reviewed-by: Peter Krempa <pkrempa@redhat.com>
src/conf/storage_source_conf.c
src/conf/storage_source_conf.h

index 5b9a80f1001d0db25d2dcb6eb5eb893d4f067b4c..d4e39b9b57fc6448c37d459f5c2d3d0f6681fcdd 100644 (file)
@@ -829,6 +829,7 @@ virStorageSourceCopy(const virStorageSource *src,
     def->relPath = g_strdup(src->relPath);
     def->backingStoreRaw = g_strdup(src->backingStoreRaw);
     def->backingStoreRawFormat = src->backingStoreRawFormat;
+    def->dataFileRaw = g_strdup(src->dataFileRaw);
     def->snapshot = g_strdup(src->snapshot);
     def->configFile = g_strdup(src->configFile);
     def->nodenameformat = g_strdup(src->nodenameformat);
@@ -894,6 +895,12 @@ virStorageSourceCopy(const virStorageSource *src,
             return NULL;
     }
 
+    if (src->dataFileStore) {
+        if (!(def->dataFileStore = virStorageSourceCopy(src->dataFileStore,
+                                                        false)))
+            return NULL;
+    }
+
     if (src->fdtuple)
         def->fdtuple = g_object_ref(src->fdtuple);
 
@@ -1174,6 +1181,9 @@ virStorageSourceClear(virStorageSource *def)
     VIR_FREE(def->nodenamestorage);
     VIR_FREE(def->nodenameformat);
 
+    VIR_FREE(def->dataFileRaw);
+    g_clear_pointer(&def->dataFileStore, virObjectUnref);
+
     virStorageSourceBackingStoreClear(def);
 
     VIR_FREE(def->tlsAlias);
index a5071160074a379895f917b2053680be5ea4eb3a..aa2aa680de3de5e4c2da53c6988efd3e217109f7 100644 (file)
@@ -359,6 +359,9 @@ struct _virStorageSource {
     /* backing chain of the storage source */
     virStorageSource *backingStore;
 
+    /* qcow2 data file source */
+    virStorageSource *dataFileStore;
+
     /* metadata for storage driver access to remote and local volumes */
     void *drv;
 
@@ -369,6 +372,7 @@ struct _virStorageSource {
     /* Name of the child backing store recorded in metadata of the
      * current file.  */
     char *backingStoreRaw;
+    char *dataFileRaw;
     virStorageFileFormat backingStoreRawFormat;
 
     /* metadata that allows identifying given storage source */