[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