[libvirt] [PATCH 3/6] list: Implement virStoragePoolListAllVolumes for storage driver
Peter Krempa
pkrempa at redhat.com
Fri Sep 7 13:38:04 UTC 2012
On 09/04/12 17:32, Osier Yang wrote:
> src/storage/storage_driver.c: Implement poolListAllVolumes.
> ---
> src/storage/storage_driver.c | 67 ++++++++++++++++++++++++++++++++++++++++++
> 1 files changed, 67 insertions(+), 0 deletions(-)
>
> diff --git a/src/storage/storage_driver.c b/src/storage/storage_driver.c
> index 4f99eb9..4f83348 100644
> --- a/src/storage/storage_driver.c
> +++ b/src/storage/storage_driver.c
> @@ -1153,6 +1153,72 @@ storagePoolListVolumes(virStoragePoolPtr obj,
> return -1;
> }
>
> +static int
> +storagePoolListAllVolumes(virStoragePoolPtr pool,
> + virStorageVolPtr **vols,
> + unsigned int flags) {
> + virStorageDriverStatePtr driver = pool->conn->storagePrivateData;
> + virStoragePoolObjPtr obj;
> + int i;
> + virStorageVolPtr *tmp_vols = NULL;
> + virStorageVolPtr vol = NULL;
> + int nvols = 0;
> + int ret = -1;
> +
> + virCheckFlags(0, -1);
> +
> + storageDriverLock(driver);
> + obj = virStoragePoolObjFindByUUID(&driver->pools, pool->uuid);
> + storageDriverUnlock(driver);
> +
> + if (!obj) {
> + virReportError(VIR_ERR_NO_STORAGE_POOL, "%s",
> + _("no storage pool with matching uuid"));
> + goto cleanup;
> + }
> +
> + if (!virStoragePoolObjIsActive(obj)) {
> + virReportError(VIR_ERR_OPERATION_INVALID, "%s",
> + _("storage pool is not active"));
> + goto cleanup;
> + }
> +
> + /* Just returns the volumes count */
> + if (!vols) {
> + ret = obj->volumes.count;
> + goto cleanup;
> + }
> +
> + if (VIR_ALLOC_N(tmp_vols, obj->volumes.count + 1) < 0) {
> + virReportOOMError();
> + goto cleanup;
> + }
> +
> + for (i = 0 ; i < obj->volumes.count; i++) {
> + if (!(vol = virGetStorageVol(pool->conn, obj->def->name,
> + obj->volumes.objs[i]->name,
> + obj->volumes.objs[i]->key)))
> + goto cleanup;
> + tmp_vols[nvols++] = vol;
> + }
> +
> + *vols = tmp_vols;
> + tmp_vols = NULL;
> + ret = nvols;
> +
> + cleanup:
> + if (tmp_vols) {
> + for (i = 0; i < nvols; i++) {
> + if (tmp_vols[i])
> + virStorageVolFree(tmp_vols[i]);
> + }
> + }
> +
> + if (obj)
> + virStoragePoolObjUnlock(obj);
> +
> + return ret;
> +}
>
> static virStorageVolPtr
> storageVolumeLookupByName(virStoragePoolPtr obj,
> @@ -2329,6 +2395,7 @@ static virStorageDriver storageDriver = {
> .poolSetAutostart = storagePoolSetAutostart, /* 0.4.0 */
> .poolNumOfVolumes = storagePoolNumVolumes, /* 0.4.0 */
> .poolListVolumes = storagePoolListVolumes, /* 0.4.0 */
> + .poolListAllVolumes = storagePoolListAllVolumes, /* 0.10.0 */
s/0.10.0/0.10.2/ ... Hm looks like that you've got that right in your
github repo already.
>
> .volLookupByName = storageVolumeLookupByName, /* 0.4.0 */
> .volLookupByKey = storageVolumeLookupByKey, /* 0.4.0 */
>
Looks good. ACK
Peter
More information about the libvir-list
mailing list