From: Michal Privoznik Date: Fri, 24 May 2019 14:35:44 +0000 (+0200) Subject: virstorageobj: Introduce VIR_STORAGE_POOL_OBJ_LIST_ADD_LIVE flag X-Git-Tag: v5.7.0-rc1~107 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=1340327f4807f1e58376c26ba19005dc4893411a;p=thirdparty%2Flibvirt.git virstorageobj: Introduce VIR_STORAGE_POOL_OBJ_LIST_ADD_LIVE flag 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 --- 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;