From: Peter Krempa Date: Fri, 13 Dec 2013 09:37:48 +0000 (+0100) Subject: storage: Introduce internal pool support X-Git-Tag: v1.2.2-rc1~284 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=362da8209d760fc1acd3a1c8df5b04aa676492eb;p=thirdparty%2Flibvirt.git storage: Introduce internal pool support To allow using the storage driver APIs to do operation on generic domain disks we will need to introduce internal storage pools that will give is a base to support this stuff even on files that weren't originally defined as a part of the pool. This patch introduces the 'internal' flag for a storage pool that will prevent it from being listed along with the user defined storage pools. --- diff --git a/src/conf/storage_conf.c b/src/conf/storage_conf.c index e4232e9af9..eaa932529d 100644 --- a/src/conf/storage_conf.c +++ b/src/conf/storage_conf.c @@ -2172,6 +2172,9 @@ static bool virStoragePoolMatch(virStoragePoolObjPtr poolobj, unsigned int flags) { + if (poolobj->internal) + return false; + /* filter by active state */ if (MATCH(VIR_CONNECT_LIST_STORAGE_POOLS_FILTERS_ACTIVE) && !((MATCH(VIR_CONNECT_LIST_STORAGE_POOLS_ACTIVE) && diff --git a/src/conf/storage_conf.h b/src/conf/storage_conf.h index 485bdba137..62ac749743 100644 --- a/src/conf/storage_conf.h +++ b/src/conf/storage_conf.h @@ -332,6 +332,7 @@ struct _virStoragePoolObj { int active; int autostart; unsigned int asyncjobs; + bool internal; virStoragePoolDefPtr def; virStoragePoolDefPtr newDef; diff --git a/src/storage/storage_driver.c b/src/storage/storage_driver.c index 85fc0f2522..bb13e8e954 100644 --- a/src/storage/storage_driver.c +++ b/src/storage/storage_driver.c @@ -377,7 +377,8 @@ storageConnectNumOfStoragePools(virConnectPtr conn) { virStoragePoolObjPtr obj = driver->pools.objs[i]; virStoragePoolObjLock(obj); if (virConnectNumOfStoragePoolsCheckACL(conn, obj->def) && - virStoragePoolObjIsActive(obj)) + virStoragePoolObjIsActive(obj) && + !obj->internal) nactive++; virStoragePoolObjUnlock(obj); } @@ -402,7 +403,8 @@ storageConnectListStoragePools(virConnectPtr conn, virStoragePoolObjPtr obj = driver->pools.objs[i]; virStoragePoolObjLock(obj); if (virConnectListStoragePoolsCheckACL(conn, obj->def) && - virStoragePoolObjIsActive(obj)) { + virStoragePoolObjIsActive(obj) && + !obj->internal) { if (VIR_STRDUP(names[got], obj->def->name) < 0) { virStoragePoolObjUnlock(obj); goto cleanup; @@ -436,7 +438,8 @@ storageConnectNumOfDefinedStoragePools(virConnectPtr conn) { virStoragePoolObjPtr obj = driver->pools.objs[i]; virStoragePoolObjLock(obj); if (virConnectNumOfDefinedStoragePoolsCheckACL(conn, obj->def) && - !virStoragePoolObjIsActive(obj)) + !virStoragePoolObjIsActive(obj) && + !obj->internal) nactive++; virStoragePoolObjUnlock(obj); } @@ -461,7 +464,8 @@ storageConnectListDefinedStoragePools(virConnectPtr conn, virStoragePoolObjPtr obj = driver->pools.objs[i]; virStoragePoolObjLock(obj); if (virConnectListDefinedStoragePoolsCheckACL(conn, obj->def) && - !virStoragePoolObjIsActive(obj)) { + !virStoragePoolObjIsActive(obj) && + !obj->internal) { if (VIR_STRDUP(names[got], obj->def->name) < 0) { virStoragePoolObjUnlock(obj); goto cleanup;