[libvirt] [PATCH v3 5/5] storage: gluster: Use volume name as "<name>" field in the XML

Peter Krempa pkrempa at redhat.com
Wed Apr 5 11:09:49 UTC 2017


On Wed, Apr 05, 2017 at 07:03:39 -0400, John Ferlan wrote:
> 
> 
> On 04/04/2017 08:20 AM, Peter Krempa wrote:
> > For native gluster pools the <dir> field denotes a directory inside the
> > pool. For the actual pool name the <name> field has to be used.
> > ---
> >  src/storage/storage_util.c                               | 16 ++++++++++++++--
> >  tests/virstorageutildata/gluster-parse-basic-native.xml  |  3 ++-
> >  .../virstorageutildata/gluster-parse-multivol-native.xml |  9 ++++++---
> >  3 files changed, 22 insertions(+), 6 deletions(-)
> > 
> > diff --git a/src/storage/storage_util.c b/src/storage/storage_util.c
> > index 1e44a2da4..7cc125a38 100644
> > --- a/src/storage/storage_util.c
> > +++ b/src/storage/storage_util.c
> > @@ -2846,6 +2846,7 @@ virStorageUtilGlusterExtractPoolSources(const char *host,
> >      xmlXPathContextPtr ctxt = NULL;
> >      xmlNodePtr *nodes = NULL;
> >      virStoragePoolSource *src = NULL;
> > +    char *volname;
> >      size_t i;
> >      int nnodes;
> >      int ret = -1;
> > @@ -2862,14 +2863,25 @@ virStorageUtilGlusterExtractPoolSources(const char *host,
> >          if (!(src = virStoragePoolSourceListNewSource(list)))
> >              goto cleanup;
> > 
> > -        if (!(src->dir = virXPathString("string(./name)", ctxt))) {
> > +        if (!(volname = virXPathString("string(./name)", ctxt))) {
> >              virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
> >                             _("failed to extract gluster volume name"));
> >              goto cleanup;
> >          }
> > 
> > -        if (pooltype == VIR_STORAGE_POOL_NETFS)
> > +        if (pooltype == VIR_STORAGE_POOL_NETFS) {
> >              src->format = VIR_STORAGE_POOL_NETFS_GLUSTERFS;
> > +            src->dir = volname;
> > +        } else if (pooltype == VIR_STORAGE_POOL_GLUSTER) {
> > +            src->name = volname;
> > +
> > +            if (VIR_STRDUP(src->dir, "/") < 0)
> > +                goto cleanup;
> > +        } else {
> > +            virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
> > +                           _("unsupported gluster lookup"));
> > +            goto cleanup;
> 
> Coverity gleefully tells me volname is leaked this morning...

Sigh. I blame Andrea for his idea of passing pooltype, which resulted
into this. It won't ever happen since the else section is dead code,
but I'll add the free in this case since it's an actual bug.
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 833 bytes
Desc: not available
URL: <http://listman.redhat.com/archives/libvir-list/attachments/20170405/11735523/attachment-0001.sig>


More information about the libvir-list mailing list