[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]

Re: [libvirt] [PATCH v4 2/4] scsi: Adjust return value for virStorageBackendSCSINewLun



On Sun, Apr 19, 2015 at 08:38:34PM -0400, John Ferlan wrote:
> Use virStorageBackendPoolUseDevPath API to determine whether creation of
> stable target path is possible for the volume.
> 
> This will differentiate a failed virStorageBackendStablePath which won't
> need to be fatal. Thus, we'll add a -2 return value to differentiate that
> the failure was a result of either the inability to find the symlink for
> the device or failure to open the target path directory
> 
> Signed-off-by: John Ferlan <jferlan redhat com>
> ---
>  src/storage/storage_backend_scsi.c | 29 ++++++++++++++++++++++++++---
>  1 file changed, 26 insertions(+), 3 deletions(-)
> 
> diff --git a/src/storage/storage_backend_scsi.c b/src/storage/storage_backend_scsi.c
> index b96caec..ae3cd9a 100644
> --- a/src/storage/storage_backend_scsi.c
> +++ b/src/storage/storage_backend_scsi.c
> @@ -146,6 +146,16 @@ virStorageBackendSCSISerial(const char *dev)
>  }
>  
>  
> +/*
> + * Attempt to create a new LUN
> + *
> + * Returns:
> + *
> + *  0  => Success
> + *  -1 => Failure due to some sort of OOM or other fatal issue found when
> + *        attempting to get/update information about a found volume
> + *  -2 => Failure to find a stable path, not fatal, caller can try another
> + */
>  static int
>  virStorageBackendSCSINewLun(virStoragePoolObjPtr pool,
>                              uint32_t host ATTRIBUTE_UNUSED,
> @@ -158,6 +168,20 @@ virStorageBackendSCSINewLun(virStoragePoolObjPtr pool,
>      char *devpath = NULL;
>      int retval = -1;
>  
> +    /* Check if the pool is using a stable target path. The call to
> +     * virStorageBackendStablePath will fail if the pool target path
> +     * isn't stable and just return the strdup'd 'devpath' anyway.
> +     * This would be indistinguishable to failing to find the stable
> +     * path to the device if the virDirRead loop to search the
> +     * target pool path for our devpath had failed.
> +     */
> +    if (!virStorageBackendPoolPathIsStable(pool->def->target.path)) {
> +        virReportError(VIR_ERR_INVALID_ARG,
> +                       _("unable to use target path '%s' for dev '%s'"),
> +                       NULLSTR(pool->def->target.path), dev);
> +        goto cleanup;
> +    }

/dev is a valid non-stable pool target path.

> +
>      if (VIR_ALLOC(vol) < 0)
>          goto cleanup;
>  
> @@ -187,13 +211,12 @@ virStorageBackendSCSINewLun(virStoragePoolObjPtr pool,
>                                                          true)) == NULL)
>          goto cleanup;
>  
> -    if (STREQ(devpath, vol->target.path) &&
> -        !(STREQ(pool->def->target.path, "/dev") ||
> -          STREQ(pool->def->target.path, "/dev/"))) {
> +    if (STREQ(devpath, vol->target.path)) {
>  

Before, when virStorageBackendStablePath returned the same devpath because
the pool path was "/dev", we continued with processing the volume.

After this patch, we won't even get here because of the first check.

Failure to stabilize the path should be expected here, if the pool
target path is not stable.

Jan

>          VIR_DEBUG("No stable path found for '%s' in '%s'",
>                    devpath, pool->def->target.path);
>  
> +        retval = -2;
>          goto cleanup;
>      }
>  
> -- 
> 2.1.0
> 
> --
> libvir-list mailing list
> libvir-list redhat com
> https://www.redhat.com/mailman/listinfo/libvir-list

Attachment: signature.asc
Description: Digital signature


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]