From 1340327f4807f1e58376c26ba19005dc4893411a Mon Sep 17 00:00:00 2001 From: Michal Privoznik Date: Fri, 24 May 2019 16:35:44 +0200 Subject: [PATCH] virstorageobj: Introduce VIR_STORAGE_POOL_OBJ_LIST_ADD_LIVE flag MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 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 Reviewed-by: Ján Tomko --- 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 08441fcf4b..4af8f5eb0a 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 ef4a6bf408..0af4b2c821 100644 --- a/src/conf/virstorageobj.h +++ b/src/conf/virstorageobj.h @@ -195,6 +195,7 @@ virStoragePoolObjVolumeListExport(virConnectPtr conn, virStoragePoolVolumeACLFilter filter); typedef enum { + VIR_STORAGE_POOL_OBJ_LIST_ADD_LIVE = (1 << 0), VIR_STORAGE_POOL_OBJ_LIST_ADD_CHECK_LIVE = (1 << 1), } virStoragePoolObjListFlags; -- GitLab