[libvirt] [Libvirt] [PATCH v3] Fix bug #611823 prohibit pools with duplicate storage

Daniel P. Berrange berrange at redhat.com
Tue Aug 2 11:12:32 UTC 2011


On Tue, Aug 02, 2011 at 10:42:47AM +0800, Lei Li wrote:
> Make sure the unique storage pool defined and create from different
> directory to avoid inconsistent version of volume pool created. 
> 
> Signed-off-by: Lei Li <lilei at linux.vnet.ibm.com>
> ---
>  src/conf/storage_conf.c  |   25 +++++++++++++++++++++++++
>  src/conf/storage_conf.h  |    2 ++
>  src/libvirt_private.syms |    1 +
>  3 files changed, 28 insertions(+), 0 deletions(-)
> 
> diff --git a/src/conf/storage_conf.c b/src/conf/storage_conf.c
> index 995f9a6..1d9fe25 100644
> --- a/src/conf/storage_conf.c
> +++ b/src/conf/storage_conf.c
> @@ -1317,6 +1317,21 @@ virStoragePoolObjFindByName(virStoragePoolObjListPtr pools,
>      return NULL;
>  }
>  
> +virStoragePoolObjPtr
> +virStoragePoolObjFindByPath(virStoragePoolObjListPtr pools,
> +                            const char *path) {
> +    unsigned int i;
> +
> +    for (i = 0 ; i < pools->count ; i++) {
> +        virStoragePoolObjLock(pools->objs[i]);
> +        if (STREQ(pools->objs[i]->def->target.path, path))
> +            return pools->objs[i];
> +        virStoragePoolObjUnlock(pools->objs[i]);
> +    }
> +
> +    return NULL;
> +}
> +
>  void
>  virStoragePoolObjClearVols(virStoragePoolObjPtr pool)
>  {
> @@ -1700,6 +1715,16 @@ int virStoragePoolObjIsDuplicate(virStoragePoolObjListPtr pools,
>          }
>      }
>  
> +    /* Check the pool list if defined target path already exist */
> +    pool = virStoragePoolObjFindByPath(pools, def->target.path);
> +    if (pool) {
> +        virStorageReportError(VIR_ERR_OPERATION_FAILED,
> +                              _("target path '%s' is already in use"),
> +                              pool->def->target.path);
> +        dupPool = -1;
> +        goto cleanup;
> +    }
> + 
>      ret = dupPool;
>  cleanup:
>      if (pool)
> diff --git a/src/conf/storage_conf.h b/src/conf/storage_conf.h
> index 271441a..9239977 100644
> --- a/src/conf/storage_conf.h
> +++ b/src/conf/storage_conf.h
> @@ -335,6 +335,8 @@ virStoragePoolObjPtr virStoragePoolObjFindByUUID(virStoragePoolObjListPtr pools,
>                                                   const unsigned char *uuid);
>  virStoragePoolObjPtr virStoragePoolObjFindByName(virStoragePoolObjListPtr pools,
>                                                   const char *name);
> +virStoragePoolObjPtr virStoragePoolObjFindByPath(virStoragePoolObjListPtr pools,
> +                                                 const char *path);
>  
>  virStorageVolDefPtr virStorageVolDefFindByKey(virStoragePoolObjPtr pool,
>                                                const char *key);
> diff --git a/src/libvirt_private.syms b/src/libvirt_private.syms
> index 830222b..19f5f92 100644
> --- a/src/libvirt_private.syms
> +++ b/src/libvirt_private.syms
> @@ -937,6 +937,7 @@ virStoragePoolObjClearVols;
>  virStoragePoolObjDeleteDef;
>  virStoragePoolObjFindByName;
>  virStoragePoolObjFindByUUID;
> +virStoragePoolObjFindByPath;
>  virStoragePoolObjIsDuplicate;
>  virStoragePoolObjListFree;
>  virStoragePoolObjLock;

NACK, for the reasons I mentioned in my review of an earlier
version of this patch

Regards,
Daniel
-- 
|: http://berrange.com      -o-    http://www.flickr.com/photos/dberrange/ :|
|: http://libvirt.org              -o-             http://virt-manager.org :|
|: http://autobuild.org       -o-         http://search.cpan.org/~danberr/ :|
|: http://entangle-photo.org       -o-       http://live.gnome.org/gtk-vnc :|




More information about the libvir-list mailing list