From 8a8826600cce4b818d969568bb6a8f03d4cc735b Mon Sep 17 00:00:00 2001 From: "Daniel P. Berrange" Date: Tue, 11 Nov 2008 15:52:16 +0000 Subject: [PATCH] Re-arrange storage backend registration --- ChangeLog | 6 ++++++ src/storage_backend.c | 44 +++++++++++-------------------------------- src/storage_backend.h | 1 + src/storage_driver.c | 37 ++++++++++++++++++++++++++++++++++++ 4 files changed, 55 insertions(+), 33 deletions(-) diff --git a/ChangeLog b/ChangeLog index 77865533dd..3cace25011 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,9 @@ +Tue Nov 11 15:51:42 GMT 2008 Daniel P. Berrange + + * src/storage_backend.c, src/storage_backend.h, src/storage_driver.c: + Decouple backend impls from generic backend code, by making driver + register backends at startup + Mon Nov 10 12:05:42 GMT 2008 Daniel P. Berrange * src/openvz_conf.c: Read filesytem template name from config diff --git a/src/storage_backend.c b/src/storage_backend.c index d146cb75fa..dc55989e6a 100644 --- a/src/storage_backend.c +++ b/src/storage_backend.c @@ -47,49 +47,27 @@ #include "storage_backend.h" -#if WITH_STORAGE_LVM -#include "storage_backend_logical.h" -#endif -#if WITH_STORAGE_ISCSI -#include "storage_backend_iscsi.h" -#endif -#if WITH_STORAGE_DISK -#include "storage_backend_disk.h" -#endif -#if WITH_STORAGE_DIR -#include "storage_backend_fs.h" -#endif - VIR_ENUM_IMPL(virStorageBackendPartTable, VIR_STORAGE_POOL_DISK_LAST, "unknown", "dos", "dvh", "gpt", "mac", "bsd", "pc98", "sun", "lvm2"); -static virStorageBackendPtr backends[] = { -#if WITH_STORAGE_DIR - &virStorageBackendDirectory, -#endif -#if WITH_STORAGE_FS - &virStorageBackendFileSystem, - &virStorageBackendNetFileSystem, -#endif -#if WITH_STORAGE_LVM - &virStorageBackendLogical, -#endif -#if WITH_STORAGE_ISCSI - &virStorageBackendISCSI, -#endif -#if WITH_STORAGE_DISK - &virStorageBackendDisk, -#endif - NULL -}; +static unsigned nbackends = 0; +static virStorageBackendPtr *backends = NULL; +int virStorageBackendRegister(virStorageBackendPtr bk) { + if (VIR_REALLOC_N(backends, nbackends+1) < 0) + return -1; + + backends[nbackends++] = bk; + return 0; +} + virStorageBackendPtr virStorageBackendForType(int type) { unsigned int i; - for (i = 0; backends[i]; i++) + for (i = 0; i < nbackends; i++) if (backends[i]->type == type) return backends[i]; diff --git a/src/storage_backend.h b/src/storage_backend.h index 46311c60e5..c667faea5f 100644 --- a/src/storage_backend.h +++ b/src/storage_backend.h @@ -121,6 +121,7 @@ struct _virStorageBackend { int volType; }; +int virStorageBackendRegister(virStorageBackendPtr bk); virStorageBackendPtr virStorageBackendForType(int type); virStorageBackendPoolOptionsPtr virStorageBackendPoolOptionsForType(int type); diff --git a/src/storage_driver.c b/src/storage_driver.c index 46bb42302e..ad540c982f 100644 --- a/src/storage_driver.c +++ b/src/storage_driver.c @@ -41,6 +41,20 @@ #include "memory.h" #include "storage_backend.h" + +#if WITH_STORAGE_LVM +#include "storage_backend_logical.h" +#endif +#if WITH_STORAGE_ISCSI +#include "storage_backend_iscsi.h" +#endif +#if WITH_STORAGE_DISK +#include "storage_backend_disk.h" +#endif +#if WITH_STORAGE_DIR +#include "storage_backend_fs.h" +#endif + #define storageLog(msg...) fprintf(stderr, msg) static virStorageDriverStatePtr driverState; @@ -97,6 +111,29 @@ storageDriverStartup(void) { char *base = NULL; char driverConf[PATH_MAX]; +#if WITH_STORAGE_DIR + if (virStorageBackendRegister(&virStorageBackendDirectory) < 0) + return -1; +#endif +#if WITH_STORAGE_FS + if (virStorageBackendRegister(&virStorageBackendFileSystem) < 0) + return -1; + if (virStorageBackendRegister(&virStorageBackendNetFileSystem) < 0) + return -1; +#endif +#if WITH_STORAGE_LVM + if (virStorageBackendRegister(&virStorageBackendLogical) < 0) + return -1; +#endif +#if WITH_STORAGE_ISCSI + if (virStorageBackendRegister(&virStorageBackendISCSI) < 0) + return -1; +#endif +#if WITH_STORAGE_DISK + if (virStorageBackendRegister(&virStorageBackendDisk) < 0) + return -1; +#endif + if (VIR_ALLOC(driverState) < 0) return -1;