mirror of
https://gitlab.com/libvirt/libvirt.git
synced 2025-01-31 08:55:22 +00:00
storage: driver: Split out code fixing pool state after deactivation
After a pool is made inactive the definition objects need to be updated (if a new definition is prepared) and transient pools need to be completely removed. Split out the code doing these steps into a separate function for later reuse. (cherry picked from commit aced6b23560b7d697069b0d81cfab230e2b20c47)
This commit is contained in:
parent
e24ff1f38e
commit
87ed28f6a5
@ -76,6 +76,31 @@ static void storageDriverUnlock(void)
|
||||
virMutexUnlock(&driver->lock);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* virStoragePoolUpdateInactive:
|
||||
* @poolptr: pointer to a variable holding the pool object pointer
|
||||
*
|
||||
* This function is supposed to be called after a pool becomes inactive. The
|
||||
* function switches to the new config object for persistent pools. Inactive
|
||||
* pools are removed.
|
||||
*/
|
||||
static void
|
||||
virStoragePoolUpdateInactive(virStoragePoolObjPtr *poolptr)
|
||||
{
|
||||
virStoragePoolObjPtr pool = *poolptr;
|
||||
|
||||
if (pool->configFile == NULL) {
|
||||
virStoragePoolObjRemove(&driver->pools, pool);
|
||||
*poolptr = NULL;
|
||||
} else if (pool->newDef) {
|
||||
virStoragePoolDefFree(pool->def);
|
||||
pool->def = pool->newDef;
|
||||
pool->newDef = NULL;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
static void
|
||||
storagePoolUpdateState(virStoragePoolObjPtr pool)
|
||||
{
|
||||
@ -1067,14 +1092,7 @@ storagePoolDestroy(virStoragePoolPtr obj)
|
||||
|
||||
pool->active = false;
|
||||
|
||||
if (pool->configFile == NULL) {
|
||||
virStoragePoolObjRemove(&driver->pools, pool);
|
||||
pool = NULL;
|
||||
} else if (pool->newDef) {
|
||||
virStoragePoolDefFree(pool->def);
|
||||
pool->def = pool->newDef;
|
||||
pool->newDef = NULL;
|
||||
}
|
||||
virStoragePoolUpdateInactive(&pool);
|
||||
|
||||
ret = 0;
|
||||
|
||||
@ -1196,10 +1214,8 @@ storagePoolRefresh(virStoragePoolPtr obj,
|
||||
0);
|
||||
pool->active = false;
|
||||
|
||||
if (pool->configFile == NULL) {
|
||||
virStoragePoolObjRemove(&driver->pools, pool);
|
||||
pool = NULL;
|
||||
}
|
||||
virStoragePoolUpdateInactive(&pool);
|
||||
|
||||
goto cleanup;
|
||||
}
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user