[libvirt] [PATCH v1 08/11] virstorageobj: Introduce VIR_STORAGE_POOL_OBJ_LIST_ADD_LIVE flag

Michal Privoznik mprivozn at redhat.com
Fri May 24 14:35:44 UTC 2019


This flag can be used to denote that the definition we're trying
to assign to a pool object is live definition and thus the
inactive definition should be saved into ->newDef.

Signed-off-by: Michal Privoznik <mprivozn at redhat.com>
---
 src/conf/virstorageobj.c | 19 ++++++++++++++-----
 src/conf/virstorageobj.h |  1 +
 2 files changed, 15 insertions(+), 5 deletions(-)

diff --git a/src/conf/virstorageobj.c b/src/conf/virstorageobj.c
index 2b9ad6fc98..bdb167e9e2 100644
--- a/src/conf/virstorageobj.c
+++ b/src/conf/virstorageobj.c
@@ -1508,14 +1508,18 @@ virStoragePoolObjSourceFindDuplicate(virStoragePoolObjListPtr pools,
 static void
 virStoragePoolObjAssignDef(virStoragePoolObjPtr obj,
                            virStoragePoolDefPtr def,
-                           unsigned int flgs ATTRIBUTE_UNUSED)
+                           unsigned int flags)
 {
-    if (!virStoragePoolObjIsActive(obj)) {
-        virStoragePoolDefFree(obj->def);
-        obj->def = def;
-    } else {
+    if (virStoragePoolObjIsActive(obj)) {
         virStoragePoolDefFree(obj->newDef);
         obj->newDef = def;
+    } else {
+        if (!obj->newDef &&
+            flags & VIR_STORAGE_POOL_OBJ_LIST_ADD_LIVE)
+            VIR_STEAL_PTR(obj->newDef, obj->def);
+
+        virStoragePoolDefFree(obj->def);
+        obj->def = def;
     }
 }
 
@@ -1529,6 +1533,11 @@ virStoragePoolObjAssignDef(virStoragePoolObjPtr obj,
  * Lookup the @def to see if it already exists in the @pools in order
  * to either update or add if it does not exist.
  *
+ * Use VIR_STORAGE_POOL_OBJ_LIST_ADD_LIVE to denote that @def
+ * refers to an active definition and thus any possible inactive
+ * definition found should be saved to ->newDef (in case of
+ * future restore).
+ *
  * If VIR_STORAGE_POOL_OBJ_LIST_ADD_CHECK_LIVE is set in @flags
  * then this will fail if the pool exists and is active.
  *
diff --git a/src/conf/virstorageobj.h b/src/conf/virstorageobj.h
index fe62515b50..df699a84c5 100644
--- a/src/conf/virstorageobj.h
+++ b/src/conf/virstorageobj.h
@@ -193,6 +193,7 @@ virStoragePoolObjVolumeListExport(virConnectPtr conn,
                                   virStoragePoolVolumeACLFilter filter);
 
 enum {
+    VIR_STORAGE_POOL_OBJ_LIST_ADD_LIVE= (1 << 0),
     VIR_STORAGE_POOL_OBJ_LIST_ADD_CHECK_LIVE = (1 << 1),
 };
 
-- 
2.21.0




More information about the libvir-list mailing list