[libvirt] [PATCH 4/5] storage: Create helper for virStorageBackendLogicalFindPoolSources

Michal Privoznik mprivozn at redhat.com
Tue Dec 15 15:54:35 UTC 2015


On 07.12.2015 21:47, John Ferlan wrote:
> Rework virStorageBackendLogicalFindPoolSources a bit to create a
> helper virStorageBackendLogicalGetPoolSources that will make the
> pvs call in order to generate a list of associated pv_name and vg_name's.
> 
> A future patch will make use of this for start/check processing to
> ensure the storage pool source definition matches expectations.
> 
> Signed-off-by: John Ferlan <jferlan at redhat.com>
> ---
>  src/storage/storage_backend_logical.c | 52 ++++++++++++++++++++++++-----------
>  1 file changed, 36 insertions(+), 16 deletions(-)
> 
> diff --git a/src/storage/storage_backend_logical.c b/src/storage/storage_backend_logical.c
> index 536e617..53ba983 100644
> --- a/src/storage/storage_backend_logical.c
> +++ b/src/storage/storage_backend_logical.c
> @@ -414,10 +414,16 @@ virStorageBackendLogicalFindPoolSourcesFunc(char **const groups,
>      return -1;
>  }
>  
> -static char *
> -virStorageBackendLogicalFindPoolSources(virConnectPtr conn ATTRIBUTE_UNUSED,
> -                                        const char *srcSpec ATTRIBUTE_UNUSED,
> -                                        unsigned int flags)
> +/*
> + * @sourceList: Pointer to a storage pool source list
> + *
> + * Use the pvs command to fill the list of pv_name and vg_name associated
> + * into the passed sourceList.
> + *
> + * Returns 0 if successful, -1 and sets error on failure
> + */
> +static int
> +virStorageBackendLogicalGetPoolSources(virStoragePoolSourceListPtr sourceList)
>  {
>      /*
>       * # pvs --noheadings -o pv_name,vg_name
> @@ -431,11 +437,7 @@ virStorageBackendLogicalFindPoolSources(virConnectPtr conn ATTRIBUTE_UNUSED,
>          2
>      };
>      virCommandPtr cmd;
> -    char *retval = NULL;
> -    virStoragePoolSourceList sourceList;
> -    size_t i;
> -
> -    virCheckFlags(0, NULL);
> +    int ret = -1;
>  
>      /*
>       * NOTE: ignoring errors here; this is just to "touch" any logical volumes
> @@ -447,20 +449,38 @@ virStorageBackendLogicalFindPoolSources(virConnectPtr conn ATTRIBUTE_UNUSED,
>          VIR_WARN("Failure when running vgscan to refresh physical volumes");
>      virCommandFree(cmd);
>  
> -    memset(&sourceList, 0, sizeof(sourceList));
> -    sourceList.type = VIR_STORAGE_POOL_LOGICAL;
> -
>      cmd = virCommandNewArgList(PVS,
>                                 "--noheadings",
>                                 "-o", "pv_name,vg_name",
>                                 NULL);
>      if (virCommandRunRegex(cmd, 1, regexes, vars,
>                             virStorageBackendLogicalFindPoolSourcesFunc,
> -                           &sourceList, "pvs") < 0) {
> -        virCommandFree(cmd);
> -        return NULL;
> -    }
> +                           sourceList, "pvs") < 0)
> +        goto cleanup;
> +    ret = 0;
> +
> + cleanup:
>      virCommandFree(cmd);
> +    return ret;
> +}
> +
> +
> +static char *
> +virStorageBackendLogicalFindPoolSources(virConnectPtr conn ATTRIBUTE_UNUSED,
> +                                        const char *srcSpec ATTRIBUTE_UNUSED,
> +                                        unsigned int flags)
> +{
> +    virStoragePoolSourceList sourceList;
> +    size_t i;
> +    char *retval = NULL;
> +
> +    virCheckFlags(0, NULL);
> +
> +    memset(&sourceList, 0, sizeof(sourceList));
> +    sourceList.type = VIR_STORAGE_POOL_LOGICAL;
> +
> +    if (virStorageBackendLogicalGetPoolSources(&sourceList) < 0)
> +        goto cleanup;
>  
>      retval = virStoragePoolSourceListFormat(&sourceList);
>      if (retval == NULL) {
> 

ACK

Michal




More information about the libvir-list mailing list