]> xenbits.xensource.com Git - libvirt.git/commitdiff
storage: Introduce virStoragePoolObjNumOfVolumes
authorJohn Ferlan <jferlan@redhat.com>
Mon, 20 Mar 2017 14:13:27 +0000 (10:13 -0400)
committerJohn Ferlan <jferlan@redhat.com>
Tue, 11 Apr 2017 12:49:51 +0000 (08:49 -0400)
Unify the NumOfVolumes API into virstorageobj.c from storage_driver and
test_driver.  The only real difference between the two is the test driver
doesn't call using the aclfilter API.

Signed-off-by: John Ferlan <jferlan@redhat.com>
src/conf/virstorageobj.c
src/conf/virstorageobj.h
src/libvirt_private.syms
src/storage/storage_driver.c
src/test/test_driver.c

index 34f2eb778cee658112094f4f0b8b8c8e680afd66..5d92ab70636356f65ee620cdff5b701a50dc6009 100644 (file)
@@ -195,6 +195,26 @@ virStorageVolDefFindByName(virStoragePoolObjPtr pool,
 }
 
 
+int
+virStoragePoolObjNumOfVolumes(virStorageVolDefListPtr volumes,
+                              virConnectPtr conn,
+                              virStoragePoolDefPtr pooldef,
+                              virStoragePoolVolumeACLFilter aclfilter)
+{
+    int nvolumes = 0;
+    size_t i;
+
+    for (i = 0; i < volumes->count; i++) {
+        virStorageVolDefPtr def = volumes->objs[i];
+        if (aclfilter && !aclfilter(conn, pooldef, def))
+            continue;
+        nvolumes++;
+    }
+
+    return nvolumes;
+}
+
+
 virStoragePoolObjPtr
 virStoragePoolObjAssignDef(virStoragePoolObjListPtr pools,
                            virStoragePoolDefPtr def)
index ecba94e43f596a21d8575d7101698cbf9747074d..3effe7a784cab590e8a789827d59beb7dfd0d38e 100644 (file)
@@ -108,6 +108,17 @@ virStorageVolDefFindByName(virStoragePoolObjPtr pool,
 void
 virStoragePoolObjClearVols(virStoragePoolObjPtr pool);
 
+typedef bool
+(*virStoragePoolVolumeACLFilter)(virConnectPtr conn,
+                                 virStoragePoolDefPtr pool,
+                                 virStorageVolDefPtr def);
+
+int
+virStoragePoolObjNumOfVolumes(virStorageVolDefListPtr volumes,
+                              virConnectPtr conn,
+                              virStoragePoolDefPtr pooldef,
+                              virStoragePoolVolumeACLFilter aclfilter);
+
 virStoragePoolObjPtr
 virStoragePoolObjAssignDef(virStoragePoolObjListPtr pools,
                            virStoragePoolDefPtr def);
index 62bc36ac58d88f1a3895992f790122c165a575eb..bcaa0f7a843444f6de4b6e69508071697051fc4e 100644 (file)
@@ -1005,6 +1005,7 @@ virStoragePoolObjListFree;
 virStoragePoolObjLoadAllConfigs;
 virStoragePoolObjLoadAllState;
 virStoragePoolObjLock;
+virStoragePoolObjNumOfVolumes;
 virStoragePoolObjRemove;
 virStoragePoolObjSaveDef;
 virStoragePoolObjSourceFindDuplicate;
index fea769887272a8ebbc64cc744276383aa2380528..7d2f74d4ca09a073ce38089478f73717ae4b1528 100644 (file)
@@ -1390,7 +1390,6 @@ storagePoolNumOfVolumes(virStoragePoolPtr obj)
 {
     virStoragePoolObjPtr pool;
     int ret = -1;
-    size_t i;
 
     if (!(pool = virStoragePoolObjFromStoragePool(obj)))
         return -1;
@@ -1403,12 +1402,9 @@ storagePoolNumOfVolumes(virStoragePoolPtr obj)
                        _("storage pool '%s' is not active"), pool->def->name);
         goto cleanup;
     }
-    ret = 0;
-    for (i = 0; i < pool->volumes.count; i++) {
-        if (virStoragePoolNumOfVolumesCheckACL(obj->conn, pool->def,
-                                               pool->volumes.objs[i]))
-            ret++;
-    }
+
+    ret = virStoragePoolObjNumOfVolumes(&pool->volumes, obj->conn, pool->def,
+                                        virStoragePoolNumOfVolumesCheckACL);
 
  cleanup:
     virStoragePoolObjUnlock(pool);
index f9d9512032de81da7eb2fac2ffe3b84035cca80d..dac87e30ada56c0bb937aab604ad1d1d4ccca676 100644 (file)
@@ -4808,7 +4808,8 @@ testStoragePoolNumOfVolumes(virStoragePoolPtr pool)
         goto cleanup;
     }
 
-    ret = privpool->volumes.count;
+    ret = virStoragePoolObjNumOfVolumes(&privpool->volumes, pool->conn,
+                                        privpool->def, NULL);
 
  cleanup:
     if (privpool)