[libvirt] [PATCH 4/4] Revert "Separate out StateAutoStart from StateInitialize"

Michal Privoznik mprivozn at redhat.com
Mon Mar 4 14:02:13 UTC 2019


https://bugzilla.redhat.com/show_bug.cgi?id=1685151

This reverts commit e4a969092bda5b3b952963fdf6658895165040b7.

Now that drivers may call virConnectOpen() on secondary drivers,
it doesn't make much sense to have autostart separated from
driver initialization callback. In fact, it creates a problem
because one driver during its initialization might try to fetch
an object from another driver but since the object is yet to be
autostarted the fetch fails. This has been observed in reality:
qemu driver performs qemuProcessReconnect() during qemu's
stateInitialize phase which may call
virDomainDiskTranslateSourcePool() which connects to the storage
driver to look up the volume. But the storage driver did not
autostarted its pools yet therefore volume lookup fails and
the domain is killed.

Signed-off-by: Michal Privoznik <mprivozn at redhat.com>
---
 src/driver-state.h |  4 ----
 src/libvirt.c      | 14 +-------------
 2 files changed, 1 insertion(+), 17 deletions(-)

diff --git a/src/driver-state.h b/src/driver-state.h
index 54ca17b260..a8595662af 100644
--- a/src/driver-state.h
+++ b/src/driver-state.h
@@ -30,9 +30,6 @@ typedef int
                          virStateInhibitCallback callback,
                          void *opaque);
 
-typedef void
-(*virDrvStateAutoStart)(void);
-
 typedef int
 (*virDrvStateCleanup)(void);
 
@@ -48,7 +45,6 @@ typedef virStateDriver *virStateDriverPtr;
 struct _virStateDriver {
     const char *name;
     virDrvStateInitialize stateInitialize;
-    virDrvStateAutoStart stateAutoStart;
     virDrvStateCleanup stateCleanup;
     virDrvStateReload stateReload;
     virDrvStateStop stateStop;
diff --git a/src/libvirt.c b/src/libvirt.c
index 854d70a2bf..7e665b6cba 100644
--- a/src/libvirt.c
+++ b/src/libvirt.c
@@ -632,11 +632,7 @@ virRegisterStateDriver(virStateDriverPtr driver)
  * @callback: callback to invoke to inhibit shutdown of the daemon
  * @opaque: data to pass to @callback
  *
- * Initialize all virtualization drivers. Accomplished in two phases,
- * the first being state and structure initialization followed by any
- * auto start supported by the driver.  This is done to ensure dependencies
- * that some drivers may have on another driver having been initialized
- * will exist, such as the storage driver's need to use the secret driver.
+ * Initialize all virtualization drivers.
  *
  * Returns 0 if all succeed, -1 upon any failure.
  */
@@ -664,14 +660,6 @@ virStateInitialize(bool privileged,
             }
         }
     }
-
-    for (i = 0; i < virStateDriverTabCount; i++) {
-        if (virStateDriverTab[i]->stateAutoStart) {
-            VIR_DEBUG("Running global auto start for %s state driver",
-                      virStateDriverTab[i]->name);
-            virStateDriverTab[i]->stateAutoStart();
-        }
-    }
     return 0;
 }
 
-- 
2.19.2




More information about the libvir-list mailing list