]> xenbits.xensource.com Git - libvirt.git/commitdiff
Re-arrange storage backend registration
authorDaniel P. Berrange <berrange@redhat.com>
Tue, 11 Nov 2008 15:52:16 +0000 (15:52 +0000)
committerDaniel P. Berrange <berrange@redhat.com>
Tue, 11 Nov 2008 15:52:16 +0000 (15:52 +0000)
ChangeLog
src/storage_backend.c
src/storage_backend.h
src/storage_driver.c

index 77865533dd6b12bdace58c5e675e585438efad3a..3cace25011c06b26a9ca792440f4171612753ab2 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,9 @@
+Tue Nov 11 15:51:42 GMT 2008 Daniel P. Berrange <berrange@redhat.com>
+
+       * 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 <berrange@redhat.com>
 
        * src/openvz_conf.c: Read filesytem template name from config
index d146cb75fa374fb0adbcb911790e2740457cda5b..dc55989e6ab7bcd3bfde780a5d08f3b49afa9a89 100644 (file)
 
 #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];
 
index 46311c60e5af998815553183629f059d614e53f3..c667faea5f1501a5d03c5146c3f486752453f381 100644 (file)
@@ -121,6 +121,7 @@ struct _virStorageBackend {
     int volType;
 };
 
+int virStorageBackendRegister(virStorageBackendPtr bk);
 
 virStorageBackendPtr virStorageBackendForType(int type);
 virStorageBackendPoolOptionsPtr virStorageBackendPoolOptionsForType(int type);
index 46bb42302e3addf75b85cd0b155d2b10311e7dcd..ad540c982f242fbdfce9f0d41e24ed161a520ebb 100644 (file)
 #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;