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@xxxxxxxxxxxxxxxxxx> > --- > 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 :| -- libvir-list mailing list libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list