[libvirt] [PATCH v3 12/12] nodedev: Convert virNodeDeviceObj to use virObjectLockable

Erik Skultety eskultet at redhat.com
Mon Jul 3 15:22:50 UTC 2017


On Thu, Jun 29, 2017 at 12:11:47PM -0400, John Ferlan wrote:
>
>
> On 06/03/2017 09:12 AM, John Ferlan wrote:
> > Now that we have a bit more control, let's convert our object into
> > a lockable object and let that magic handle the create and lock/unlock.
> >
> > This also involves creating a virNodeDeviceEndAPI in order to handle
> > the object cleaup for API's that use the Add or Find API's in order
> > to get a locked/reffed object. The EndAPI will unlock and unref the
> > object returning NULL to indicate to the caller to not use the obj.
> >
> > For now this also involves a forward reference to the Unlock, but
> > that'll be removed shortly when the object is convert to use the
> > virObjectLockable shortly.
> >
> > Signed-off-by: John Ferlan <jferlan at redhat.com>
> > ---
> >  src/conf/virnodedeviceobj.c          | 156 ++++++++++++++++++-----------------
> >  src/conf/virnodedeviceobj.h          |  11 +--
> >  src/libvirt_private.syms             |   4 +-
> >  src/node_device/node_device_driver.c |  17 ++--
> >  src/node_device/node_device_hal.c    |   6 +-
> >  src/node_device/node_device_udev.c   |  12 +--
> >  src/test/test_driver.c               |  40 ++++-----
> >  7 files changed, 122 insertions(+), 124 deletions(-)
> >
>
> [...]
>
> > diff --git a/src/test/test_driver.c b/src/test/test_driver.c
> > index 67fe252..7b67523 100644
> > --- a/src/test/test_driver.c
> > +++ b/src/test/test_driver.c
>
> [...]
>
> Oh my... looks like I forgot to go back and revisit the following hunk
> ;-), but of course tripped across it while working through merging
> changes for patch 1.
>
> > @@ -5597,28 +5596,29 @@ testNodeDeviceDestroy(virNodeDevicePtr dev)
> >       * taken, so we have to dup the parent's name and drop the lock
> >       * before calling it.  We don't need the reference to the object
> >       * any more once we have the parent's name.  */
> > -    virNodeDeviceObjUnlock(obj);
> > +    virNodeDeviceObjEndAPI(&obj);
>
> This should be "virObjectUnlock(obj);"
>
> >
> >      /* We do this just for basic validation, but also avoid finding a
> >       * vport capable HBA if for some reason our vHBA doesn't exist */
> >      if (virNodeDeviceObjListGetParentHost(driver->devs, def,
> > -                                          EXISTING_DEVICE) < 0) {
> > -        obj = NULL;
> > +                                          EXISTING_DEVICE) < 0)
>
> This would require calling virObjectLock(obj);
>
> >          goto cleanup;
> > -    }
> >
> >      event = virNodeDeviceEventLifecycleNew(dev->name,
> >                                             VIR_NODE_DEVICE_EVENT_DELETED,
> >                                             0);
> >
> > -    virNodeDeviceObjLock(obj);
>
> and calling virObjectLock(obj) here prior to calling ObjListRemove and
> setting obj = NULL;
>
> > +    /*
> > +     *
> > +     * REVIEW THIS
> > +     *
> > +     */
> >      virNodeDeviceObjListRemove(driver->devs, obj);
> > -    virNodeDeviceObjFree(obj);
> > +    virObjectUnref(obj);
> >      obj = NULL;
>
> Hope this makes sense... I'm guessing some of this series will need to
> be reposted in a v4 anyway - including the "next" logical step to alter
> the ObjList which is what you're after anyway, but was further down in
> my original stack of patches.

Well, these would be really hard to track, so I agree that posting a v4 would
make things easier, since 10 (11 technically) out of 12 patches have already
been ACK'd, so it wouldn't prolong the overall process more than just those 2
patches we discuss.

Erik

>
> John
> >
> >   cleanup:
> > -    if (obj)
> > -        virNodeDeviceObjUnlock(obj);
> > +    virNodeDeviceObjEndAPI(&obj);
> >      testObjectEventQueue(driver, event);
> >      VIR_FREE(parent_name);
> >      VIR_FREE(wwnn);
> >
>
> --
> libvir-list mailing list
> libvir-list at redhat.com
> https://www.redhat.com/mailman/listinfo/libvir-list




More information about the libvir-list mailing list