[libvirt] [PATCH 4/7] storage: Modify stateInitialize to support storage state XML

John Ferlan jferlan at redhat.com
Wed Mar 25 16:33:51 UTC 2015



On 03/24/2015 06:06 AM, Erik Skultety wrote:
> Storage state driver directories initialization needs to be modified
> to become more generic.
> 
> Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=1177733
> ---
>  src/storage/storage_driver.c | 52 ++++++++++++++++++++++++--------------------
>  1 file changed, 29 insertions(+), 23 deletions(-)
> 
> diff --git a/src/storage/storage_driver.c b/src/storage/storage_driver.c
> index e088ffa..9bd93d2 100644
> --- a/src/storage/storage_driver.c
> +++ b/src/storage/storage_driver.c

Could we fix the comment above this too!

s/QEmu daemon/Storage Driver/

> @@ -154,54 +154,60 @@ storageStateInitialize(bool privileged,
>                         virStateInhibitCallback callback ATTRIBUTE_UNUSED,
>                         void *opaque ATTRIBUTE_UNUSED)
>  {
> -    char *base = NULL;
> +    int ret = -1;
> +    char *configdir = NULL;
> +    char *rundir = NULL;
>  
>      if (VIR_ALLOC(driver) < 0)
> -        return -1;
> +        return ret;
>  
>      if (virMutexInit(&driver->lock) < 0) {
>          VIR_FREE(driver);
> -        return -1;
> +        return ret;
>      }
>      storageDriverLock();
>  
>      if (privileged) {
> -        if (VIR_STRDUP(base, SYSCONFDIR "/libvirt") < 0)
> +        if (VIR_STRDUP(driver->configDir,
> +                       SYSCONFDIR "/libvirt/storage") < 0 ||
> +            VIR_STRDUP(driver->autostartDir,
> +                       SYSCONFDIR "/libvirt/storage/autostart") < 0 ||
> +            VIR_STRDUP(driver->stateDir,
> +                       LOCALSTATEDIR "/run/libvirt/storage") < 0)
>              goto error;
>      } else {
> -        base = virGetUserConfigDirectory();
> -        if (!base)
> +        configdir = virGetUserConfigDirectory();
> +        rundir = virGetUserRuntimeDirectory();
> +        if (!(configdir && rundir))
> +            goto error;
> +
> +        if ((virAsprintf(&driver->configDir,
> +                        "%s/storage", configdir) < 0) ||
> +            (virAsprintf(&driver->autostartDir,
> +                        "%s/storage", configdir) < 0) ||
> +            (virAsprintf(&driver->stateDir,
> +                         "%s/storage/run", rundir) < 0))
>              goto error;
>      }
>      driver->privileged = privileged;
>  
> -    /*
> -     * Configuration paths are either $USER_CONFIG_HOME/libvirt/storage/...
> -     * (session) or /etc/libvirt/storage/... (system).
> -     */
> -    if (virAsprintf(&driver->configDir,
> -                    "%s/storage", base) == -1)
> -        goto error;
> -
> -    if (virAsprintf(&driver->autostartDir,
> -                    "%s/storage/autostart", base) == -1)
> -        goto error;
> -
> -    VIR_FREE(base);
> -

Braver than I was - although I prefer your method because it's clearer.

I think if this is merged into patch 2 - it'll be easier to follow

John

>      if (virStoragePoolLoadAllConfigs(&driver->pools,
>                                       driver->configDir,
>                                       driver->autostartDir) < 0)
>          goto error;
>  
>      storageDriverUnlock();
> -    return 0;
> +
> +    ret = 0;
> + cleanup:
> +    VIR_FREE(configdir);
> +    VIR_FREE(rundir);
> +    return ret;
>  
>   error:
> -    VIR_FREE(base);
>      storageDriverUnlock();
>      storageStateCleanup();
> -    return -1;
> +    goto cleanup;
>  }
>  
>  /**
> 




More information about the libvir-list mailing list