From 5ab746b83aec0fa6674250c1575984e116d45371 Mon Sep 17 00:00:00 2001 From: Michal Privoznik Date: Wed, 26 Nov 2014 17:13:00 +0100 Subject: [PATCH] storage: Introduce storagePoolLookupByTargetPath While this could be exposed as a public API, it's not done yet as there's no demand for that yet. Anyway, this is just preparing the environment for easier volume creation on the destination. Signed-off-by: Michal Privoznik --- src/storage/storage_driver.c | 42 ++++++++++++++++++++++++++++++++++++ src/storage/storage_driver.h | 5 +++++ 2 files changed, 47 insertions(+) diff --git a/src/storage/storage_driver.c b/src/storage/storage_driver.c index 99ccb49ce0..7f33d6f1cd 100644 --- a/src/storage/storage_driver.c +++ b/src/storage/storage_driver.c @@ -1464,6 +1464,48 @@ storageVolLookupByPath(virConnectPtr conn, return ret; } +virStoragePoolPtr +storagePoolLookupByTargetPath(virConnectPtr conn, + const char *path) +{ + size_t i; + virStoragePoolPtr ret = NULL; + char *cleanpath; + + cleanpath = virFileSanitizePath(path); + if (!cleanpath) + return NULL; + + storageDriverLock(); + for (i = 0; i < driver->pools.count && !ret; i++) { + virStoragePoolObjPtr pool = driver->pools.objs[i]; + + virStoragePoolObjLock(pool); + + if (!virStoragePoolObjIsActive(pool)) { + virStoragePoolObjUnlock(pool); + continue; + } + + if (STREQ(path, pool->def->target.path)) { + ret = virGetStoragePool(conn, pool->def->name, pool->def->uuid, + NULL, NULL); + } + + virStoragePoolObjUnlock(pool); + } + storageDriverUnlock(); + + if (!ret) { + virReportError(VIR_ERR_NO_STORAGE_VOL, + _("no storage pool with matching target path '%s'"), + path); + } + + VIR_FREE(cleanpath); + return ret; +} + static int storageVolDeleteInternal(virStorageVolPtr obj, diff --git a/src/storage/storage_driver.h b/src/storage/storage_driver.h index b805ddd3b5..4f28dc155d 100644 --- a/src/storage/storage_driver.h +++ b/src/storage/storage_driver.h @@ -57,6 +57,11 @@ int virStorageFileGetMetadata(virStorageSourcePtr src, int virStorageTranslateDiskSourcePool(virConnectPtr conn, virDomainDiskDefPtr def); +virStoragePoolPtr +storagePoolLookupByTargetPath(virConnectPtr conn, + const char *path) + ATTRIBUTE_NONNULL(2); + int storageRegister(void); #endif /* __VIR_STORAGE_DRIVER_H__ */ -- GitLab