[libvirt] [PATCH v3 1/4] storage: Split out the valid path check

Ján Tomko jtomko at redhat.com
Thu Apr 16 12:33:45 UTC 2015


On Tue, Apr 07, 2015 at 04:21:00PM -0400, John Ferlan wrote:
> For virStorageBackendStablePath, in order to make decisions in other code
> split out the checks regarding whether the pool's target is empty, using /dev,
> using /dev/, or doesn't start with /dev
> 
> Signed-off-by: John Ferlan <jferlan at redhat.com>
> ---
>  src/storage/storage_backend.c | 42 +++++++++++++++++++++++++++++-------------
>  src/storage/storage_backend.h |  1 +
>  2 files changed, 30 insertions(+), 13 deletions(-)
> 
> diff --git a/src/storage/storage_backend.c b/src/storage/storage_backend.c
> index 9322571..77c3be3 100644
> --- a/src/storage/storage_backend.c
> +++ b/src/storage/storage_backend.c
> @@ -1675,6 +1675,25 @@ virStorageBackendUpdateVolTargetInfoFD(virStorageSourcePtr target,
>      return 0;
>  }
>  
> +/*
> + * Check how the storage pool target path is set.
> + *

Answering 'how?' with a bool seems strange to me :)

> + * Returns false if:
> + *   1. No target path set
> + *   2. Target path is /dev or /dev/
> + *   3. Target path does not start with /dev

This comment just restates the function logic, not its intention.
And it's just a matter of time until someone changes the logic without
updating the comment. I think it is not necessary to comment the
function.

> + */
> +bool
> +virStorageBackendPoolUseDevPath(virStoragePoolObjPtr pool)

'UseDevPath' confuses me. How about 'PoolPathIsStable' (or
PoolPathCanBeStable, since we only check if it starts with dev).

Moreover, this takes the pool as an argument, but only looks at the
path. It should either look at the pool type and deal with logical pools
as well, or just take a string as an argument.

> +{
> +    if (pool->def->target.path == NULL ||
> +        STREQ(pool->def->target.path, "/dev") ||
> +        STREQ(pool->def->target.path, "/dev/") ||
> +        !STRPREFIX(pool->def->target.path, "/dev"))
> +        return false;

This would look better split into separate conditions, like it was in
the original function.

> +
> +    return true;
> +}
>  
>  /*
>   * Given a volume path directly in /dev/XXX, iterate over the
> @@ -1704,20 +1723,17 @@ virStorageBackendStablePath(virStoragePoolObjPtr pool,
>      int retry = 0;
>      int direrr;
>  
> -    /* Short circuit if pool has no target, or if its /dev */
> -    if (pool->def->target.path == NULL ||
> -        STREQ(pool->def->target.path, "/dev") ||
> -        STREQ(pool->def->target.path, "/dev/"))
> -        goto ret_strdup;
> -
> -    /* Skip whole thing for a pool which isn't in /dev
> -     * so we don't mess filesystem/dir based pools
> +    /*
> +     * If this is a logical pool, then just strdup the passed devpath
> +     * and return. Logical pools are under /dev but already have stable
> +     * paths, so they don't need to search under the pool target path.
> +     *

This comment is too verbose for my taste, I think the original version:
  /* Logical pools are under /dev but already have stable paths */
is enough.

> +     * For the SCSI/iSCSI pools, if the pool target path isn't under
> +     * /dev, then just strdup the passed devpath and return so we don't
> +     * mess filesystem/dir based pools
>       */

SCSI/iSCSI pools are not filesystem/dir based.

Jan
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 819 bytes
Desc: Digital signature
URL: <http://listman.redhat.com/archives/libvir-list/attachments/20150416/6f8168ac/attachment-0001.sig>


More information about the libvir-list mailing list