]> xenbits.xensource.com Git - libvirt.git/commitdiff
storage: Introduce internal pool support
authorPeter Krempa <pkrempa@redhat.com>
Fri, 13 Dec 2013 09:37:48 +0000 (10:37 +0100)
committerPeter Krempa <pkrempa@redhat.com>
Thu, 16 Jan 2014 10:39:53 +0000 (11:39 +0100)
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
src/conf/storage_conf.h
src/storage/storage_driver.c

index e4232e9af94232018422a0ecd79c66b4bdf619b1..eaa932529dc543e0c6dfcc48cd488634d77f763b 100644 (file)
@@ -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) &&
index 485bdba137ed335bfa5d92cfe0b962cdc30846f8..62ac749743a0d25a200ca2057c53ff2434aa7088 100644 (file)
@@ -332,6 +332,7 @@ struct _virStoragePoolObj {
     int active;
     int autostart;
     unsigned int asyncjobs;
+    bool internal;
 
     virStoragePoolDefPtr def;
     virStoragePoolDefPtr newDef;
index 85fc0f2522dea89ead9e2091d4a8b32d9d1384d4..bb13e8e954f4ad7cddcb2b6d3dc9031b535a84ae 100644 (file)
@@ -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;