[libvirt] [PATCH v3 19/48] remote: in per-driver daemons ensure that state initialize succeeds

Christophe de Dinechin dinechin at redhat.com
Tue Jul 30 10:59:54 UTC 2019


Daniel P. Berrangé writes:

> When running in libvirtd, we are happy for any of the drivers to simply
> skip their initialization in virStateInitialize, as other drivers are
> still potentially useful.
>
> When running in per-driver daemons though, we want the daemon to abort
> startup if the driver cannot initialize itself, as the daemon will be
> useless without it.
>
> Reviewed-by: Andrea Bolognani <abologna at redhat.com>
> Signed-off-by: Daniel P. Berrangé <berrange at redhat.com>
> ---
>  src/bhyve/bhyve_driver.c                | 10 +++++-----
>  src/driver-state.h                      |  8 +++++++-
>  src/interface/interface_backend_netcf.c |  8 ++++----
>  src/interface/interface_backend_udev.c  |  4 ++--
>  src/libvirt.c                           | 15 ++++++++++++---
>  src/libvirt_internal.h                  |  1 +
>  src/libxl/libxl_driver.c                | 10 +++++-----
>  src/lxc/lxc_driver.c                    | 12 ++++++------
>  src/network/bridge_driver.c             |  4 ++--
>  src/node_device/node_device_hal.c       | 12 ++++++------
>  src/node_device/node_device_udev.c      |  8 ++++----
>  src/nwfilter/nwfilter_driver.c          | 12 ++++++------
>  src/qemu/qemu_driver.c                  |  8 ++++----
>  src/remote/remote_daemon.c              |  6 ++++++
>  src/remote/remote_driver.c              |  2 +-
>  src/secret/secret_driver.c              |  8 ++++----
>  src/storage/storage_driver.c            |  8 ++++----
>  src/vz/vz_driver.c                      | 14 +++++++-------
>  18 files changed, 86 insertions(+), 64 deletions(-)
>
> diff --git a/src/bhyve/bhyve_driver.c b/src/bhyve/bhyve_driver.c
> index 5387ac5570..e2c1b00080 100644
> --- a/src/bhyve/bhyve_driver.c
> +++ b/src/bhyve/bhyve_driver.c
> @@ -1220,16 +1220,16 @@ bhyveStateInitialize(bool privileged,
>  {
>      if (!privileged) {
>          VIR_INFO("Not running privileged, disabling driver");
> -        return 0;
> +        return VIR_DRV_STATE_INIT_SKIPPED;
>      }
>
>      if (VIR_ALLOC(bhyve_driver) < 0)
> -        return -1;
> +        return VIR_DRV_STATE_INIT_ERROR;
>
>      bhyve_driver->lockFD = -1;
>      if (virMutexInit(&bhyve_driver->lock) < 0) {
>          VIR_FREE(bhyve_driver);
> -        return -1;
> +        return VIR_DRV_STATE_INIT_ERROR;
>      }
>
>      if (!(bhyve_driver->closeCallbacks = virCloseCallbacksNew()))
> @@ -1303,11 +1303,11 @@ bhyveStateInitialize(bool privileged,
>
>      bhyveAutostartDomains(bhyve_driver);
>
> -    return 0;
> +    return VIR_DRV_STATE_INIT_COMPLETE;
>
>   cleanup:
>      bhyveStateCleanup();
> -    return -1;
> +    return VIR_DRV_STATE_INIT_ERROR;
>  }
>
>  unsigned
> diff --git a/src/driver-state.h b/src/driver-state.h
> index 974b2252ee..69e2678dfc 100644
> --- a/src/driver-state.h
> +++ b/src/driver-state.h
> @@ -24,7 +24,13 @@
>  # error "Don't include this file directly, only use driver.h"
>  #endif
>
> -typedef int
> +typedef enum {
> +    VIR_DRV_STATE_INIT_ERROR = -1,
> +    VIR_DRV_STATE_INIT_SKIPPED,
> +    VIR_DRV_STATE_INIT_COMPLETE,
> +} virDrvStateInitResult;
> +
> +typedef virDrvStateInitResult
>  (*virDrvStateInitialize)(bool privileged,
>                           virStateInhibitCallback callback,
>                           void *opaque);
> diff --git a/src/interface/interface_backend_netcf.c b/src/interface/interface_backend_netcf.c
> index 0000587cee..eb509ccc13 100644
> --- a/src/interface/interface_backend_netcf.c
> +++ b/src/interface/interface_backend_netcf.c
> @@ -93,10 +93,10 @@ netcfStateInitialize(bool privileged,
>                       void *opaque ATTRIBUTE_UNUSED)
>  {
>      if (virNetcfDriverStateInitialize() < 0)
> -        return -1;
> +        return VIR_DRV_STATE_INIT_ERROR;
>
>      if (!(driver = virObjectLockableNew(virNetcfDriverStateClass)))
> -        return -1;
> +        return VIR_DRV_STATE_INIT_ERROR;
>
>      driver->privileged = privileged;
>
> @@ -129,12 +129,12 @@ netcfStateInitialize(bool privileged,
>                         _("failed to initialize netcf"));
>          goto error;
>      }
> -    return 0;
> +    return VIR_DRV_STATE_INIT_COMPLETE;
>
>   error:
>      virObjectUnref(driver);
>      driver = NULL;
> -    return -1;
> +    return VIR_DRV_STATE_INIT_ERROR;
>  }
>
>
> diff --git a/src/interface/interface_backend_udev.c b/src/interface/interface_backend_udev.c
> index fea5108dbc..ef748540d1 100644
> --- a/src/interface/interface_backend_udev.c
> +++ b/src/interface/interface_backend_udev.c
> @@ -1172,7 +1172,7 @@ udevStateInitialize(bool privileged,
>                      virStateInhibitCallback callback ATTRIBUTE_UNUSED,
>                      void *opaque ATTRIBUTE_UNUSED)
>  {
> -    int ret = -1;
> +    int ret = VIR_DRV_STATE_INIT_ERROR;
>
>      if (VIR_ALLOC(driver) < 0)
>          goto cleanup;
> @@ -1210,7 +1210,7 @@ udevStateInitialize(bool privileged,
>      }
>      driver->privileged = privileged;
>
> -    ret = 0;
> +    ret = VIR_DRV_STATE_INIT_COMPLETE;
>
>   cleanup:
>      if (ret < 0)
> diff --git a/src/libvirt.c b/src/libvirt.c
> index f0a768fc7e..9390a767f9 100644
> --- a/src/libvirt.c
> +++ b/src/libvirt.c
> @@ -629,6 +629,7 @@ virRegisterStateDriver(virStateDriverPtr driver)
>  /**
>   * virStateInitialize:
>   * @privileged: set to true if running with root privilege, false otherwise
> + * @mandatory: set to true if all drivers must report success, not skipped
>   * @callback: callback to invoke to inhibit shutdown of the daemon
>   * @opaque: data to pass to @callback
>   *
> @@ -638,6 +639,7 @@ virRegisterStateDriver(virStateDriverPtr driver)
>   */
>  int
>  virStateInitialize(bool privileged,
> +                   bool mandatory,
>                     virStateInhibitCallback callback,
>                     void *opaque)
>  {
> @@ -648,15 +650,22 @@ virStateInitialize(bool privileged,
>
>      for (i = 0; i < virStateDriverTabCount; i++) {
>          if (virStateDriverTab[i]->stateInitialize) {
> +            virDrvStateInitResult ret;
>              VIR_DEBUG("Running global init for %s state driver",
>                        virStateDriverTab[i]->name);
> -            if (virStateDriverTab[i]->stateInitialize(privileged,
> -                                                      callback,
> -                                                      opaque) < 0) {
> +            ret = virStateDriverTab[i]->stateInitialize(privileged,
> +                                                        callback,
> +                                                        opaque);
> +            VIR_DEBUG("State init result %d (mandatory=%d)", ret, mandatory);
> +            if (ret == VIR_DRV_STATE_INIT_ERROR) {

I'm a bit conflicted here. I like the explicit "error" in the name, but
all the code checks for errors with < 0, and that would work here too.
But then, you also just replied to me that libvirt only uses -1 as an
error value, so the < 0 really means == -1... Not sure what to prefer
here ;-)


>                  VIR_ERROR(_("Initialization of %s state driver failed: %s"),
>                            virStateDriverTab[i]->name,
>                            virGetLastErrorMessage());
>                  return -1;
> +            } else if (ret == VIR_DRV_STATE_INIT_SKIPPED && mandatory) {
> +                VIR_ERROR(_("Initialization of mandatory %s state driver skipped"),
> +                          virStateDriverTab[i]->name);
> +                return -1;
>              }
>          }
>      }
> diff --git a/src/libvirt_internal.h b/src/libvirt_internal.h
> index 3f012fdd4b..4a74dbc2af 100644
> --- a/src/libvirt_internal.h
> +++ b/src/libvirt_internal.h
> @@ -30,6 +30,7 @@ typedef void (*virStateInhibitCallback)(bool inhibit,
>                                          void *opaque);
>
>  int virStateInitialize(bool privileged,
> +                       bool mandatory,
>                         virStateInhibitCallback inhibit,
>                         void *opaque);
>  int virStateCleanup(void);
> diff --git a/src/libxl/libxl_driver.c b/src/libxl/libxl_driver.c
> index 492028c487..231960b817 100644
> --- a/src/libxl/libxl_driver.c
> +++ b/src/libxl/libxl_driver.c
> @@ -657,17 +657,17 @@ libxlStateInitialize(bool privileged,
>      char ebuf[1024];
>
>      if (!libxlDriverShouldLoad(privileged))
> -        return 0;
> +        return VIR_DRV_STATE_INIT_SKIPPED;
>
>      if (VIR_ALLOC(libxl_driver) < 0)
> -        return -1;
> +        return VIR_DRV_STATE_INIT_ERROR;
>
>      libxl_driver->lockFD = -1;
>      if (virMutexInit(&libxl_driver->lock) < 0) {
>          virReportError(VIR_ERR_INTERNAL_ERROR,
>                         "%s", _("cannot initialize mutex"));
>          VIR_FREE(libxl_driver);
> -        return -1;
> +        return VIR_DRV_STATE_INIT_ERROR;
>      }
>
>      /* Allocate bitmap for vnc port reservation */
> @@ -806,12 +806,12 @@ libxlStateInitialize(bool privileged,
>      virDomainObjListForEach(libxl_driver->domains, libxlDomainManagedSaveLoad,
>                              libxl_driver);
>
> -    return 0;
> +    return VIR_DRV_STATE_INIT_COMPLETE;
>
>   error:
>      VIR_FREE(driverConf);
>      libxlStateCleanup();
> -    return -1;
> +    return VIR_DRV_STATE_INIT_ERROR;
>  }
>
>  static int
> diff --git a/src/lxc/lxc_driver.c b/src/lxc/lxc_driver.c
> index d0b6703101..0baf18f3ef 100644
> --- a/src/lxc/lxc_driver.c
> +++ b/src/lxc/lxc_driver.c
> @@ -1545,7 +1545,7 @@ static int lxcStateInitialize(bool privileged,
>      /* Check that the user is root, silently disable if not */
>      if (!privileged) {
>          VIR_INFO("Not running privileged, disabling driver");
> -        return 0;
> +        return VIR_DRV_STATE_INIT_SKIPPED;
>      }
>
>      /* Check that this is a container enabled kernel */
> @@ -1554,15 +1554,15 @@ static int lxcStateInitialize(bool privileged,
>                                       VIR_PROCESS_NAMESPACE_UTS |
>                                       VIR_PROCESS_NAMESPACE_IPC) < 0) {
>          VIR_INFO("LXC support not available in this kernel, disabling driver");
> -        return 0;
> +        return VIR_DRV_STATE_INIT_SKIPPED;
>      }
>
>      if (VIR_ALLOC(lxc_driver) < 0)
> -        return -1;
> +        return VIR_DRV_STATE_INIT_ERROR;
>      lxc_driver->lockFD = -1;
>      if (virMutexInit(&lxc_driver->lock) < 0) {
>          VIR_FREE(lxc_driver);
> -        return -1;
> +        return VIR_DRV_STATE_INIT_ERROR;
>      }
>
>      if (!(lxc_driver->domains = virDomainObjListNew()))
> @@ -1633,12 +1633,12 @@ static int lxcStateInitialize(bool privileged,
>      virLXCProcessAutostartAll(lxc_driver);
>
>      virObjectUnref(caps);
> -    return 0;
> +    return VIR_DRV_STATE_INIT_COMPLETE;
>
>   cleanup:
>      virObjectUnref(caps);
>      lxcStateCleanup();
> -    return -1;
> +    return VIR_DRV_STATE_INIT_ERROR;
>  }
>
>  static void lxcNotifyLoadDomain(virDomainObjPtr vm, int newVM, void *opaque)
> diff --git a/src/network/bridge_driver.c b/src/network/bridge_driver.c
> index 41fa89a4af..2b1fa59390 100644
> --- a/src/network/bridge_driver.c
> +++ b/src/network/bridge_driver.c
> @@ -713,7 +713,7 @@ networkStateInitialize(bool privileged,
>                         virStateInhibitCallback callback ATTRIBUTE_UNUSED,
>                         void *opaque ATTRIBUTE_UNUSED)
>  {
> -    int ret = -1;
> +    int ret = VIR_DRV_STATE_INIT_ERROR;
>      char *configdir = NULL;
>      char *rundir = NULL;
>  #ifdef WITH_FIREWALLD
> @@ -847,7 +847,7 @@ networkStateInitialize(bool privileged,
>      }
>  #endif
>
> -    ret = 0;
> +    ret = VIR_DRV_STATE_INIT_COMPLETE;
>   cleanup:
>      VIR_FREE(configdir);
>      VIR_FREE(rundir);
> diff --git a/src/node_device/node_device_hal.c b/src/node_device/node_device_hal.c
> index 1f3f867599..d46e4e98f3 100644
> --- a/src/node_device/node_device_hal.c
> +++ b/src/node_device/node_device_hal.c
> @@ -599,7 +599,7 @@ nodeStateInitialize(bool privileged ATTRIBUTE_UNUSED,
>      char **udi = NULL;
>      int num_devs;
>      size_t i;
> -    int ret = -1;
> +    int ret = VIR_DRV_STATE_INIT_ERROR;
>      DBusConnection *sysbus;
>      DBusError err;
>
> @@ -608,12 +608,12 @@ nodeStateInitialize(bool privileged ATTRIBUTE_UNUSED,
>            cmpstringp);
>
>      if (VIR_ALLOC(driver) < 0)
> -        return -1;
> +        return VIR_DRV_STATE_INIT_ERROR;
>
>      driver->lockFD = -1;
>      if (virMutexInit(&driver->lock) < 0) {
>          VIR_FREE(driver);
> -        return -1;
> +        return VIR_DRV_STATE_INIT_ERROR;
>      }
>      nodeDeviceLock();
>
> @@ -648,7 +648,7 @@ nodeStateInitialize(bool privileged ATTRIBUTE_UNUSED,
>          virReportError(VIR_ERR_INTERNAL_ERROR,
>                         _("DBus not available, disabling HAL driver: %s"),
>                         virGetLastErrorMessage());
> -        ret = 0;
> +        ret = VIR_DRV_STATE_INIT_SKIPPED;
>          goto failure;
>      }
>
> @@ -671,7 +671,7 @@ nodeStateInitialize(bool privileged ATTRIBUTE_UNUSED,
>          /* We don't want to show a fatal error here,
>             otherwise entire libvirtd shuts down when
>             hald isn't running */
> -        ret = 0;
> +        ret = VIR_DRV_STATE_INIT_SKIPPED;
>          goto failure;
>      }
>
> @@ -709,7 +709,7 @@ nodeStateInitialize(bool privileged ATTRIBUTE_UNUSED,
>      }
>      VIR_FREE(udi);
>
> -    return 0;
> +    return VIR_DRV_STATE_INIT_COMPLETE;
>
>   failure:
>      if (dbus_error_is_set(&err)) {
> diff --git a/src/node_device/node_device_udev.c b/src/node_device/node_device_udev.c
> index 8bc63c506c..adf60e4537 100644
> --- a/src/node_device/node_device_udev.c
> +++ b/src/node_device/node_device_udev.c
> @@ -1816,14 +1816,14 @@ nodeStateInitialize(bool privileged,
>      virThread enumThread;
>
>      if (VIR_ALLOC(driver) < 0)
> -        return -1;
> +        return VIR_DRV_STATE_INIT_ERROR;
>
>      driver->lockFD = -1;
>      if (virMutexInit(&driver->lock) < 0) {
>          virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
>                         _("Unable to initialize mutex"));
>          VIR_FREE(driver);
> -        return -1;
> +        return VIR_DRV_STATE_INIT_ERROR;
>      }
>
>      driver->privileged = privileged;
> @@ -1919,11 +1919,11 @@ nodeStateInitialize(bool privileged,
>          goto cleanup;
>      }
>
> -    return 0;
> +    return VIR_DRV_STATE_INIT_COMPLETE;
>
>   cleanup:
>      nodeStateCleanup();
> -    return -1;
> +    return VIR_DRV_STATE_INIT_ERROR;
>
>   unlock:
>      virObjectUnlock(priv);
> diff --git a/src/nwfilter/nwfilter_driver.c b/src/nwfilter/nwfilter_driver.c
> index 530e4f5872..6073143437 100644
> --- a/src/nwfilter/nwfilter_driver.c
> +++ b/src/nwfilter/nwfilter_driver.c
> @@ -184,10 +184,10 @@ nwfilterStateInitialize(bool privileged,
>
>      if (virDBusHasSystemBus() &&
>          !(sysbus = virDBusGetSystemBus()))
> -        return -1;
> +        return VIR_DRV_STATE_INIT_ERROR;
>
>      if (VIR_ALLOC(driver) < 0)
> -        return -1;
> +        return VIR_DRV_STATE_INIT_ERROR;
>
>      driver->lockFD = -1;
>      if (virMutexInit(&driver->lock) < 0)
> @@ -201,7 +201,7 @@ nwfilterStateInitialize(bool privileged,
>          goto error;
>
>      if (!privileged)
> -        return 0;
> +        return VIR_DRV_STATE_INIT_SKIPPED;
>
>      nwfilterDriverLock();
>
> @@ -281,13 +281,13 @@ nwfilterStateInitialize(bool privileged,
>
>      nwfilterDriverUnlock();
>
> -    return 0;
> +    return VIR_DRV_STATE_INIT_COMPLETE;
>
>   error:
>      nwfilterDriverUnlock();
>      nwfilterStateCleanup();
>
> -    return -1;
> +    return VIR_DRV_STATE_INIT_ERROR;
>
>   err_techdrivers_shutdown:
>      virNWFilterTechDriversShutdown();
> @@ -302,7 +302,7 @@ nwfilterStateInitialize(bool privileged,
>      virNWFilterObjListFree(driver->nwfilters);
>      VIR_FREE(driver);
>
> -    return -1;
> +    return VIR_DRV_STATE_INIT_ERROR;
>  }
>
>  /**
> diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c
> index 4ca3eb7bde..d4fc8bbbd6 100644
> --- a/src/qemu/qemu_driver.c
> +++ b/src/qemu/qemu_driver.c
> @@ -730,7 +730,7 @@ qemuStateInitialize(bool privileged,
>      size_t i;
>
>      if (VIR_ALLOC(qemu_driver) < 0)
> -        return -1;
> +        return VIR_DRV_STATE_INIT_ERROR;
>
>      qemu_driver->lockFD = -1;
>
> @@ -738,7 +738,7 @@ qemuStateInitialize(bool privileged,
>          virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
>                         _("cannot initialize mutex"));
>          VIR_FREE(qemu_driver);
> -        return -1;
> +        return VIR_DRV_STATE_INIT_ERROR;
>      }
>
>      qemu_driver->inhibitCallback = callback;
> @@ -1074,14 +1074,14 @@ qemuStateInitialize(bool privileged,
>
>      qemuAutostartDomains(qemu_driver);
>
> -    return 0;
> +    return VIR_DRV_STATE_INIT_COMPLETE;
>
>   error:
>      VIR_FREE(driverConf);
>      VIR_FREE(hugepagePath);
>      VIR_FREE(memoryBackingPath);
>      qemuStateCleanup();
> -    return -1;
> +    return VIR_DRV_STATE_INIT_ERROR;
>  }
>
>  static void qemuNotifyLoadDomain(virDomainObjPtr vm, int newVM, void *opaque)
> diff --git a/src/remote/remote_daemon.c b/src/remote/remote_daemon.c
> index fadfc7c016..42c51c1329 100644
> --- a/src/remote/remote_daemon.c
> +++ b/src/remote/remote_daemon.c
> @@ -792,6 +792,11 @@ static void daemonRunStateInit(void *opaque)
>  {
>      virNetDaemonPtr dmn = opaque;
>      virIdentityPtr sysident = virIdentityGetSystem();
> +#ifdef MODULE_NAME
> +    bool mandatory = true;
> +#else /* ! MODULE_NAME */
> +    bool mandatory = false;
> +#endif /* ! MODULE_NAME */
>
>      virIdentitySetCurrent(sysident);
>
> @@ -804,6 +809,7 @@ static void daemonRunStateInit(void *opaque)
>       * we're ready, since it can take a long time and this will
>       * seriously delay OS bootup process */
>      if (virStateInitialize(virNetDaemonIsPrivileged(dmn),
> +                           mandatory,
>                             daemonInhibitCallback,
>                             dmn) < 0) {
>          VIR_ERROR(_("Driver state initialization failed"));
> diff --git a/src/remote/remote_driver.c b/src/remote/remote_driver.c
> index 72c2336b7a..8e1024dca3 100644
> --- a/src/remote/remote_driver.c
> +++ b/src/remote/remote_driver.c
> @@ -195,7 +195,7 @@ remoteStateInitialize(bool privileged ATTRIBUTE_UNUSED,
>       * re-entering ourselves
>       */
>      inside_daemon = true;
> -    return 0;
> +    return VIR_DRV_STATE_INIT_COMPLETE;
>  }
>
>
> diff --git a/src/secret/secret_driver.c b/src/secret/secret_driver.c
> index 0af2bcef96..0d5ea05f56 100644
> --- a/src/secret/secret_driver.c
> +++ b/src/secret/secret_driver.c
> @@ -457,12 +457,12 @@ secretStateInitialize(bool privileged,
>                        void *opaque ATTRIBUTE_UNUSED)
>  {
>      if (VIR_ALLOC(driver) < 0)
> -        return -1;
> +        return VIR_DRV_STATE_INIT_ERROR;
>
>      driver->lockFD = -1;
>      if (virMutexInit(&driver->lock) < 0) {
>          VIR_FREE(driver);
> -        return -1;
> +        return VIR_DRV_STATE_INIT_ERROR;
>      }
>      secretDriverLock();
>
> @@ -514,12 +514,12 @@ secretStateInitialize(bool privileged,
>          goto error;
>
>      secretDriverUnlock();
> -    return 0;
> +    return VIR_DRV_STATE_INIT_COMPLETE;
>
>   error:
>      secretDriverUnlock();
>      secretStateCleanup();
> -    return -1;
> +    return VIR_DRV_STATE_INIT_ERROR;
>  }
>
>
> diff --git a/src/storage/storage_driver.c b/src/storage/storage_driver.c
> index 03ac6a6845..dfa654178b 100644
> --- a/src/storage/storage_driver.c
> +++ b/src/storage/storage_driver.c
> @@ -255,12 +255,12 @@ storageStateInitialize(bool privileged,
>      VIR_AUTOFREE(char *) rundir = NULL;
>
>      if (VIR_ALLOC(driver) < 0)
> -        return -1;
> +        return VIR_DRV_STATE_INIT_ERROR;
>
>      driver->lockFD = -1;
>      if (virMutexInit(&driver->lock) < 0) {
>          VIR_FREE(driver);
> -        return -1;
> +        return VIR_DRV_STATE_INIT_ERROR;
>      }
>      storageDriverLock();
>
> @@ -326,12 +326,12 @@ storageStateInitialize(bool privileged,
>
>      storageDriverUnlock();
>
> -    return 0;
> +    return VIR_DRV_STATE_INIT_COMPLETE;
>
>   error:
>      storageDriverUnlock();
>      storageStateCleanup();
> -    return -1;
> +    return VIR_DRV_STATE_INIT_ERROR;
>  }
>
>  /**
> diff --git a/src/vz/vz_driver.c b/src/vz/vz_driver.c
> index f5d05a7f43..da72b209d1 100644
> --- a/src/vz/vz_driver.c
> +++ b/src/vz/vz_driver.c
> @@ -4118,36 +4118,36 @@ vzStateInitialize(bool privileged,
>                    void *opaque ATTRIBUTE_UNUSED)
>  {
>      if (!privileged)
> -        return 0;
> +        return VIR_DRV_STATE_INIT_SKIPPED;
>
>      vz_driver_privileged = privileged;
>
>      if (virFileMakePathWithMode(VZ_STATEDIR, S_IRWXU) < 0) {
>          virReportSystemError(errno, _("cannot create state directory '%s'"),
>                               VZ_STATEDIR);
> -        return -1;
> +        return VIR_DRV_STATE_INIT_ERROR;
>      }
>
>      if ((vz_driver_lock_fd =
>           virPidFileAcquire(VZ_STATEDIR, "driver", false, getpid())) < 0)
> -        return -1;
> +        return VIR_DRV_STATE_INIT_ERROR;
>
>      if (prlsdkInit() < 0) {
>          VIR_DEBUG("%s", _("Can't initialize Parallels SDK"));
> -        return -1;
> +        return VIR_DRV_STATE_INIT_ERROR;
>      }
>
> -   if (virMutexInit(&vz_driver_lock) < 0)
> +    if (virMutexInit(&vz_driver_lock) < 0)
>          goto error;
>
>      /* Failing to create driver here is not fatal and only means
>       * that next driver client will try once more when connecting */
>      vz_driver = vzDriverObjNew();
> -    return 0;
> +    return VIR_DRV_STATE_INIT_COMPLETE;
>
>   error:
>      vzStateCleanup();
> -    return -1;
> +    return VIR_DRV_STATE_INIT_ERROR;
>  }
>
>  static virStateDriver vzStateDriver = {
> --
> 2.21.0


Reviewed-by: Christophe de Dinechin <dinechin at redhat.com>

--
Cheers,
Christophe de Dinechin (IRC c3d)




More information about the libvir-list mailing list