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.
---
src/conf/storage_conf.c | 3 +++
src/conf/storage_conf.h | 1 +
src/storage/storage_driver.c | 12 ++++++++----
3 files changed, 12 insertions(+), 4 deletions(-)
diff --git a/src/conf/storage_conf.c b/src/conf/storage_conf.c
index ed492cf..379bbd6 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 485bdba..62ac749 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 aaa0f02..683d61d 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;
--
1.8.5.2