diff --git a/daemon/remote.c b/daemon/remote.c index 340d07de6f..41b8ea860d 100644 --- a/daemon/remote.c +++ b/daemon/remote.c @@ -4651,14 +4651,16 @@ get_nonnull_interface(virConnectPtr conn, remote_nonnull_interface iface) static virStoragePoolPtr get_nonnull_storage_pool(virConnectPtr conn, remote_nonnull_storage_pool pool) { - return virGetStoragePool(conn, pool.name, BAD_CAST pool.uuid); + return virGetStoragePool(conn, pool.name, BAD_CAST pool.uuid, + NULL, NULL); } static virStorageVolPtr get_nonnull_storage_vol(virConnectPtr conn, remote_nonnull_storage_vol vol) { virStorageVolPtr ret; - ret = virGetStorageVol(conn, vol.pool, vol.name, vol.key); + ret = virGetStorageVol(conn, vol.pool, vol.name, vol.key, + NULL, NULL); return ret; } diff --git a/src/conf/storage_conf.c b/src/conf/storage_conf.c index 9a765d8d53..1c9934c4ea 100644 --- a/src/conf/storage_conf.c +++ b/src/conf/storage_conf.c @@ -1981,7 +1981,8 @@ virStoragePoolList(virConnectPtr conn, if (pools) { if (!(pool = virGetStoragePool(conn, poolobj->def->name, - poolobj->def->uuid))) { + poolobj->def->uuid, + NULL, NULL))) { virStoragePoolObjUnlock(poolobj); goto cleanup; } diff --git a/src/datatypes.c b/src/datatypes.c index ff7c524666..c0ed3a2700 100644 --- a/src/datatypes.c +++ b/src/datatypes.c @@ -379,6 +379,8 @@ virInterfaceDispose(void *obj) * @conn: the hypervisor connection * @name: pointer to the storage pool name * @uuid: pointer to the uuid + * @privateData: pointer to driver specific private data + * @freeFunc: private data cleanup function pointer specfic to driver * * Lookup if the storage pool is already registered for that connection, * if yes return a new pointer to it, if no allocate a new structure, @@ -389,7 +391,8 @@ virInterfaceDispose(void *obj) */ virStoragePoolPtr virGetStoragePool(virConnectPtr conn, const char *name, - const unsigned char *uuid) + const unsigned char *uuid, + void *privateData, virFreeCallback freeFunc) { virStoragePoolPtr ret = NULL; @@ -412,6 +415,10 @@ virGetStoragePool(virConnectPtr conn, const char *name, ret->conn = virObjectRef(conn); memcpy(&(ret->uuid[0]), uuid, VIR_UUID_BUFLEN); + /* set the driver specific data */ + ret->privateData = privateData; + ret->privateDataFreeFunc = freeFunc; + return ret; no_memory: @@ -442,6 +449,10 @@ virStoragePoolDispose(void *obj) virUUIDFormat(pool->uuid, uuidstr); VIR_DEBUG("release pool %p %s %s", pool, pool->name, uuidstr); + if (pool->privateDataFreeFunc) { + pool->privateDataFreeFunc(pool->privateData); + } + VIR_FREE(pool->name); virObjectUnref(pool->conn); } @@ -453,6 +464,8 @@ virStoragePoolDispose(void *obj) * @pool: pool owning the volume * @name: pointer to the storage vol name * @key: pointer to unique key of the volume + * @privateData: pointer to driver specific private data + * @freeFunc: private data cleanup function pointer specfic to driver * * Lookup if the storage vol is already registered for that connection, * if yes return a new pointer to it, if no allocate a new structure, @@ -463,7 +476,7 @@ virStoragePoolDispose(void *obj) */ virStorageVolPtr virGetStorageVol(virConnectPtr conn, const char *pool, const char *name, - const char *key) + const char *key, void *privateData, virFreeCallback freeFunc) { virStorageVolPtr ret = NULL; @@ -489,6 +502,10 @@ virGetStorageVol(virConnectPtr conn, const char *pool, const char *name, ret->conn = virObjectRef(conn); + /* set driver specific data */ + ret->privateData = privateData; + ret->privateDataFreeFunc = freeFunc; + return ret; no_memory: @@ -516,6 +533,10 @@ virStorageVolDispose(void *obj) virStorageVolPtr vol = obj; VIR_DEBUG("release vol %p %s", vol, vol->name); + if (vol->privateDataFreeFunc) { + vol->privateDataFreeFunc(vol->privateData); + } + VIR_FREE(vol->key); VIR_FREE(vol->name); VIR_FREE(vol->pool); diff --git a/src/datatypes.h b/src/datatypes.h index e4c8262ac9..55f97ed7a1 100644 --- a/src/datatypes.h +++ b/src/datatypes.h @@ -196,6 +196,13 @@ struct _virStoragePool { virConnectPtr conn; /* pointer back to the connection */ char *name; /* the storage pool external name */ unsigned char uuid[VIR_UUID_BUFLEN]; /* the storage pool unique identifier */ + + /* Private data pointer which can be used by driver as they wish. + * Cleanup function pointer can be hooked to provide custom cleanup + * operation. + */ + void *privateData; + virFreeCallback privateDataFreeFunc; }; /** @@ -209,6 +216,13 @@ struct _virStorageVol { char *pool; /* Pool name of owner */ char *name; /* the storage vol external name */ char *key; /* unique key for storage vol */ + + /* Private data pointer which can be used by driver as they wish. + * Cleanup function pointer can be hooked to provide custom cleanup + * operation. + */ + void *privateData; + virFreeCallback privateDataFreeFunc; }; /** @@ -293,12 +307,16 @@ virInterfacePtr virGetInterface(virConnectPtr conn, const char *name, const char *mac); virStoragePoolPtr virGetStoragePool(virConnectPtr conn, - const char *name, - const unsigned char *uuid); + const char *name, + const unsigned char *uuid, + void *privateData, + virFreeCallback freeFunc); virStorageVolPtr virGetStorageVol(virConnectPtr conn, const char *pool, const char *name, - const char *key); + const char *key, + void *privateData, + virFreeCallback freeFunc); virNodeDevicePtr virGetNodeDevice(virConnectPtr conn, const char *name); virSecretPtr virGetSecret(virConnectPtr conn, diff --git a/src/esx/esx_storage_driver.c b/src/esx/esx_storage_driver.c index 08d5ab1b6a..53a1e24229 100644 --- a/src/esx/esx_storage_driver.c +++ b/src/esx/esx_storage_driver.c @@ -282,7 +282,7 @@ esxStoragePoolLookupByName(virConnectPtr conn, const char *name) md5_buffer(hostMount->mountInfo->path, strlen(hostMount->mountInfo->path), md5); - pool = virGetStoragePool(conn, name, md5); + pool = virGetStoragePool(conn, name, md5, NULL, NULL); cleanup: esxVI_ObjectContent_Free(&datastore); @@ -348,7 +348,7 @@ esxStoragePoolLookupByUUID(virConnectPtr conn, const unsigned char *uuid) goto cleanup; } - pool = virGetStoragePool(conn, name, uuid); + pool = virGetStoragePool(conn, name, uuid, NULL, NULL); cleanup: esxVI_String_Free(&propertyNameList); @@ -766,7 +766,7 @@ esxStorageVolumeLookupByName(virStoragePoolPtr pool, const char *name) goto cleanup; } - volume = virGetStorageVol(pool->conn, pool->name, name, key); + volume = virGetStorageVol(pool->conn, pool->name, name, key, NULL, NULL); cleanup: VIR_FREE(datastorePath); @@ -800,7 +800,7 @@ esxStorageVolumeLookupByPath(virConnectPtr conn, const char *path) goto cleanup; } - volume = virGetStorageVol(conn, datastoreName, directoryAndFileName, key); + volume = virGetStorageVol(conn, datastoreName, directoryAndFileName, key, NULL, NULL); cleanup: VIR_FREE(datastoreName); @@ -934,7 +934,7 @@ esxStorageVolumeLookupByKey(virConnectPtr conn, const char *key) if (STREQ(key, key_candidate)) { /* Found matching UUID */ volume = virGetStorageVol(conn, datastoreName, - volumeName, key); + volumeName, key, NULL, NULL); goto cleanup; } } @@ -1155,7 +1155,7 @@ esxStorageVolumeCreateXML(virStoragePoolPtr pool, const char *xmldesc, goto cleanup; } - volume = virGetStorageVol(pool->conn, pool->name, def->name, key); + volume = virGetStorageVol(pool->conn, pool->name, def->name, key, NULL, NULL); cleanup: if (virtualDiskSpec != NULL) { @@ -1357,7 +1357,7 @@ esxStorageVolumeCreateXMLFrom(virStoragePoolPtr pool, const char *xmldesc, goto cleanup; } - volume = virGetStorageVol(pool->conn, pool->name, def->name, key); + volume = virGetStorageVol(pool->conn, pool->name, def->name, key, NULL, NULL); cleanup: VIR_FREE(sourceDatastorePath); diff --git a/src/parallels/parallels_storage.c b/src/parallels/parallels_storage.c index 71f3f892f2..8d4e2c6e8b 100644 --- a/src/parallels/parallels_storage.c +++ b/src/parallels/parallels_storage.c @@ -350,7 +350,8 @@ parallelsStoragePoolLookupByUUID(virConnectPtr conn, const unsigned char *uuid) goto cleanup; } - ret = virGetStoragePool(conn, pool->def->name, pool->def->uuid); + ret = virGetStoragePool(conn, pool->def->name, pool->def->uuid, + NULL, NULL); cleanup: if (pool) @@ -374,7 +375,8 @@ parallelsStoragePoolLookupByName(virConnectPtr conn, const char *name) goto cleanup; } - ret = virGetStoragePool(conn, pool->def->name, pool->def->uuid); + ret = virGetStoragePool(conn, pool->def->name, pool->def->uuid, + NULL, NULL); cleanup: if (pool) @@ -459,7 +461,8 @@ parallelsStoragePoolDefine(virConnectPtr conn, goto cleanup; } - ret = virGetStoragePool(conn, pool->def->name, pool->def->uuid); + ret = virGetStoragePool(conn, pool->def->name, pool->def->uuid, + NULL, NULL); cleanup: virStoragePoolDefFree(def); @@ -831,7 +834,8 @@ parallelsStorageVolumeLookupByName(virStoragePoolPtr pool, } ret = virGetStorageVol(pool->conn, privpool->def->name, - privvol->name, privvol->key); + privvol->name, privvol->key, + NULL, NULL); cleanup: if (privpool) @@ -857,7 +861,8 @@ parallelsStorageVolumeLookupByKey(virConnectPtr conn, const char *key) if (privvol) { ret = virGetStorageVol(conn, privconn->pools.objs[i]->def->name, - privvol->name, privvol->key); + privvol->name, privvol->key, + NULL, NULL); virStoragePoolObjUnlock(privconn->pools.objs[i]); break; } @@ -889,7 +894,8 @@ parallelsStorageVolumeLookupByPathLocked(virConnectPtr conn, const char *path) if (privvol) { ret = virGetStorageVol(conn, privconn->pools.objs[i]->def->name, - privvol->name, privvol->key); + privvol->name, privvol->key, + NULL, NULL); virStoragePoolObjUnlock(privconn->pools.objs[i]); break; } @@ -1026,7 +1032,8 @@ parallelsStorageVolumeCreateXML(virStoragePoolPtr pool, goto cleanup; ret = virGetStorageVol(pool->conn, privpool->def->name, - privvol->name, privvol->key); + privvol->name, privvol->key, + NULL, NULL); cleanup: if (privpool) virStoragePoolObjUnlock(privpool); @@ -1115,7 +1122,8 @@ parallelsStorageVolumeCreateXMLFrom(virStoragePoolPtr pool, privpool->volumes.objs[privpool->volumes.count++] = privvol; ret = virGetStorageVol(pool->conn, privpool->def->name, - privvol->name, privvol->key); + privvol->name, privvol->key, + NULL, NULL); privvol = NULL; cleanup: diff --git a/src/phyp/phyp_driver.c b/src/phyp/phyp_driver.c index e8cef4fa7d..63017f43ec 100644 --- a/src/phyp/phyp_driver.c +++ b/src/phyp/phyp_driver.c @@ -2021,7 +2021,7 @@ phypVolumeLookupByName(virStoragePoolPtr pool, const char *volname) if (key == NULL) return NULL; - vol = virGetStorageVol(pool->conn, pool->name, volname, key); + vol = virGetStorageVol(pool->conn, pool->name, volname, key, NULL, NULL); VIR_FREE(key); @@ -2111,7 +2111,7 @@ phypStorageVolCreateXML(virStoragePoolPtr pool, if ((vol = virGetStorageVol(pool->conn, pool->name, voldef->name, - key)) == NULL) + key, NULL, NULL)) == NULL) goto err; VIR_FREE(key); @@ -2192,7 +2192,7 @@ phypVolumeLookupByPath(virConnectPtr conn, const char *volname) if (key == NULL) goto cleanup; - vol = virGetStorageVol(conn, ret, volname, key); + vol = virGetStorageVol(conn, ret, volname, key, NULL, NULL); cleanup: VIR_FREE(ret); @@ -2250,7 +2250,7 @@ phypStoragePoolLookupByName(virConnectPtr conn, const char *name) if (phypGetStoragePoolUUID(conn, uuid, name) == -1) return NULL; - return virGetStoragePool(conn, name, uuid); + return virGetStoragePool(conn, name, uuid, NULL, NULL); } static char * @@ -2684,7 +2684,7 @@ phypGetStoragePoolLookUpByUUID(virConnectPtr conn, continue; if (!memcmp(local_uuid, uuid, VIR_UUID_BUFLEN)) { - sp = virGetStoragePool(conn, pools[i], uuid); + sp = virGetStoragePool(conn, pools[i], uuid, NULL, NULL); VIR_FREE(local_uuid); VIR_FREE(pools); @@ -2728,7 +2728,7 @@ phypStoragePoolCreateXML(virConnectPtr conn, goto err; } - if ((sp = virGetStoragePool(conn, def->name, def->uuid)) == NULL) + if ((sp = virGetStoragePool(conn, def->name, def->uuid, NULL, NULL)) == NULL) goto err; if (phypBuildStoragePool(conn, def) == -1) diff --git a/src/remote/remote_driver.c b/src/remote/remote_driver.c index 62b77296da..ec33698e5d 100644 --- a/src/remote/remote_driver.c +++ b/src/remote/remote_driver.c @@ -5863,13 +5863,15 @@ get_nonnull_interface(virConnectPtr conn, remote_nonnull_interface iface) static virStoragePoolPtr get_nonnull_storage_pool(virConnectPtr conn, remote_nonnull_storage_pool pool) { - return virGetStoragePool(conn, pool.name, BAD_CAST pool.uuid); + return virGetStoragePool(conn, pool.name, BAD_CAST pool.uuid, + NULL, NULL); } static virStorageVolPtr get_nonnull_storage_vol(virConnectPtr conn, remote_nonnull_storage_vol vol) { - return virGetStorageVol(conn, vol.pool, vol.name, vol.key); + return virGetStorageVol(conn, vol.pool, vol.name, vol.key, + NULL, NULL); } static virNodeDevicePtr diff --git a/src/storage/storage_driver.c b/src/storage/storage_driver.c index faca2a2189..2e33b803ba 100644 --- a/src/storage/storage_driver.c +++ b/src/storage/storage_driver.c @@ -273,7 +273,8 @@ storagePoolLookupByUUID(virConnectPtr conn, goto cleanup; } - ret = virGetStoragePool(conn, pool->def->name, pool->def->uuid); + ret = virGetStoragePool(conn, pool->def->name, pool->def->uuid, + NULL, NULL); cleanup: if (pool) @@ -298,7 +299,8 @@ storagePoolLookupByName(virConnectPtr conn, goto cleanup; } - ret = virGetStoragePool(conn, pool->def->name, pool->def->uuid); + ret = virGetStoragePool(conn, pool->def->name, pool->def->uuid, + NULL, NULL); cleanup: if (pool) @@ -555,7 +557,8 @@ storagePoolCreate(virConnectPtr conn, VIR_INFO("Creating storage pool '%s'", pool->def->name); pool->active = 1; - ret = virGetStoragePool(conn, pool->def->name, pool->def->uuid); + ret = virGetStoragePool(conn, pool->def->name, pool->def->uuid, + NULL, NULL); cleanup: virStoragePoolDefFree(def); @@ -601,7 +604,8 @@ storagePoolDefine(virConnectPtr conn, def = NULL; VIR_INFO("Defining storage pool '%s'", pool->def->name); - ret = virGetStoragePool(conn, pool->def->name, pool->def->uuid); + ret = virGetStoragePool(conn, pool->def->name, pool->def->uuid, + NULL, NULL); cleanup: virStoragePoolDefFree(def); @@ -1202,7 +1206,8 @@ storagePoolListAllVolumes(virStoragePoolPtr pool, 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))) + obj->volumes.objs[i]->key, + NULL, NULL))) goto cleanup; tmp_vols[nvols++] = vol; } @@ -1258,7 +1263,8 @@ storageVolumeLookupByName(virStoragePoolPtr obj, goto cleanup; } - ret = virGetStorageVol(obj->conn, pool->def->name, vol->name, vol->key); + ret = virGetStorageVol(obj->conn, pool->def->name, vol->name, vol->key, + NULL, NULL); cleanup: if (pool) @@ -1285,7 +1291,8 @@ storageVolumeLookupByKey(virConnectPtr conn, ret = virGetStorageVol(conn, driver->pools.objs[i]->def->name, vol->name, - vol->key); + vol->key, + NULL, NULL); } virStoragePoolObjUnlock(driver->pools.objs[i]); } @@ -1338,7 +1345,8 @@ storageVolumeLookupByPath(virConnectPtr conn, ret = virGetStorageVol(conn, driver->pools.objs[i]->def->name, vol->name, - vol->key); + vol->key, + NULL, NULL); } virStoragePoolObjUnlock(driver->pools.objs[i]); } @@ -1415,7 +1423,7 @@ storageVolumeCreateXML(virStoragePoolPtr obj, pool->volumes.objs[pool->volumes.count++] = voldef; volobj = virGetStorageVol(obj->conn, pool->def->name, voldef->name, - voldef->key); + voldef->key, NULL, NULL); if (!volobj) { pool->volumes.count--; goto cleanup; @@ -1587,7 +1595,7 @@ storageVolumeCreateXMLFrom(virStoragePoolPtr obj, pool->volumes.objs[pool->volumes.count++] = newvol; volobj = virGetStorageVol(obj->conn, pool->def->name, newvol->name, - newvol->key); + newvol->key, NULL, NULL); /* Drop the pool lock during volume allocation */ pool->asyncjobs++; diff --git a/src/test/test_driver.c b/src/test/test_driver.c index 9e4d9f2b2f..6ca59e279e 100644 --- a/src/test/test_driver.c +++ b/src/test/test_driver.c @@ -3885,7 +3885,8 @@ testStoragePoolLookupByUUID(virConnectPtr conn, goto cleanup; } - ret = virGetStoragePool(conn, pool->def->name, pool->def->uuid); + ret = virGetStoragePool(conn, pool->def->name, pool->def->uuid, + NULL, NULL); cleanup: if (pool) @@ -3909,7 +3910,8 @@ testStoragePoolLookupByName(virConnectPtr conn, goto cleanup; } - ret = virGetStoragePool(conn, pool->def->name, pool->def->uuid); + ret = virGetStoragePool(conn, pool->def->name, pool->def->uuid, + NULL, NULL); cleanup: if (pool) @@ -4201,7 +4203,8 @@ testStoragePoolCreate(virConnectPtr conn, } pool->active = 1; - ret = virGetStoragePool(conn, pool->def->name, pool->def->uuid); + ret = virGetStoragePool(conn, pool->def->name, pool->def->uuid, + NULL, NULL); cleanup: virStoragePoolDefFree(def); @@ -4241,7 +4244,8 @@ testStoragePoolDefine(virConnectPtr conn, goto cleanup; } - ret = virGetStoragePool(conn, pool->def->name, pool->def->uuid); + ret = virGetStoragePool(conn, pool->def->name, pool->def->uuid, + NULL, NULL); cleanup: virStoragePoolDefFree(def); @@ -4668,7 +4672,8 @@ testStoragePoolListAllVolumes(virStoragePoolPtr obj, for (i = 0 ; i < pool->volumes.count; i++) { if (!(vol = virGetStorageVol(obj->conn, pool->def->name, pool->volumes.objs[i]->name, - pool->volumes.objs[i]->key))) + pool->volumes.objs[i]->key, + NULL, NULL))) goto cleanup; tmp_vols[nvols++] = vol; } @@ -4725,7 +4730,8 @@ testStorageVolumeLookupByName(virStoragePoolPtr pool, } ret = virGetStorageVol(pool->conn, privpool->def->name, - privvol->name, privvol->key); + privvol->name, privvol->key, + NULL, NULL); cleanup: if (privpool) @@ -4752,7 +4758,8 @@ testStorageVolumeLookupByKey(virConnectPtr conn, ret = virGetStorageVol(conn, privconn->pools.objs[i]->def->name, privvol->name, - privvol->key); + privvol->key, + NULL, NULL); virStoragePoolObjUnlock(privconn->pools.objs[i]); break; } @@ -4786,7 +4793,8 @@ testStorageVolumeLookupByPath(virConnectPtr conn, ret = virGetStorageVol(conn, privconn->pools.objs[i]->def->name, privvol->name, - privvol->key); + privvol->key, + NULL, NULL); virStoragePoolObjUnlock(privconn->pools.objs[i]); break; } @@ -4875,7 +4883,8 @@ testStorageVolumeCreateXML(virStoragePoolPtr pool, privpool->volumes.objs[privpool->volumes.count++] = privvol; ret = virGetStorageVol(pool->conn, privpool->def->name, - privvol->name, privvol->key); + privvol->name, privvol->key, + NULL, NULL); privvol = NULL; cleanup: @@ -4969,7 +4978,8 @@ testStorageVolumeCreateXMLFrom(virStoragePoolPtr pool, privpool->volumes.objs[privpool->volumes.count++] = privvol; ret = virGetStorageVol(pool->conn, privpool->def->name, - privvol->name, privvol->key); + privvol->name, privvol->key, + NULL, NULL); privvol = NULL; cleanup: diff --git a/src/vbox/vbox_tmpl.c b/src/vbox/vbox_tmpl.c index bcffb2f6b4..f9fa442d1b 100644 --- a/src/vbox/vbox_tmpl.c +++ b/src/vbox/vbox_tmpl.c @@ -8321,7 +8321,7 @@ static virStoragePoolPtr vboxStoragePoolLookupByName(virConnectPtr conn, const c ignore_value(virUUIDParse(uuidstr, uuid)); - ret = virGetStoragePool(conn, name, uuid); + ret = virGetStoragePool(conn, name, uuid, NULL, NULL); } return ret; @@ -8450,7 +8450,8 @@ static virStorageVolPtr vboxStorageVolLookupByName(virStoragePoolPtr pool, const vboxIIDToUUID(&hddIID, uuid); virUUIDFormat(uuid, key); - ret = virGetStorageVol(pool->conn, pool->name, name, key); + ret = virGetStorageVol(pool->conn, pool->name, name, key, + NULL, NULL); VIR_DEBUG("virStorageVolPtr: %p", ret); VIR_DEBUG("Storage Volume Name: %s", name); @@ -8511,7 +8512,8 @@ static virStorageVolPtr vboxStorageVolLookupByKey(virConnectPtr conn, const char if (hddNameUtf8) { if (vboxStorageNumOfPools(conn) == 1) { - ret = virGetStorageVol(conn, "default-pool", hddNameUtf8, key); + ret = virGetStorageVol(conn, "default-pool", hddNameUtf8, key, + NULL, NULL); VIR_DEBUG("Storage Volume Pool: %s", "default-pool"); } else { /* TODO: currently only one default pool and thus @@ -8583,7 +8585,8 @@ static virStorageVolPtr vboxStorageVolLookupByPath(virConnectPtr conn, const cha * the check below, change it when pools are supported */ if (vboxStorageNumOfPools(conn) == 1) - ret = virGetStorageVol(conn, "default-pool", hddNameUtf8, key); + ret = virGetStorageVol(conn, "default-pool", hddNameUtf8, key, + NULL, NULL); VIR_DEBUG("Storage Volume Pool: %s", "default-pool"); VIR_DEBUG("Storage Volume Name: %s", hddNameUtf8); @@ -8683,7 +8686,8 @@ static virStorageVolPtr vboxStorageVolCreateXML(virStoragePoolPtr pool, vboxIIDToUUID(&hddIID, uuid); virUUIDFormat(uuid, key); - ret = virGetStorageVol(pool->conn, pool->name, def->name, key); + ret = virGetStorageVol(pool->conn, pool->name, def->name, key, + NULL, NULL); } vboxIIDUnalloc(&hddIID);