[libvirt] [PATCH v4 12/14] nodedev: Convert virNodeDeviceObj to use virObjectLockable
John Ferlan
jferlan at redhat.com
Thu Jul 13 22:36:42 UTC 2017
On 07/11/2017 10:38 AM, Erik Skultety wrote:
> On Mon, Jul 03, 2017 at 05:25:28PM -0400, 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
>
> s/cleaup/cleanup
>
eagle eyes
>
> [...]
>>
>> cleanup:
>> - virNodeDeviceObjUnlock(obj);
>> + virNodeDeviceObjEndAPI(&obj);
>> if (ret == -1) {
>> --ncaps;
>> while (--ncaps >= 0)
>> @@ -613,8 +613,7 @@ nodeDeviceDestroy(virNodeDevicePtr device)
>> * to be taken, so grab the object def which will have the various
>> * fields used to search (name, parent, parent_wwnn, parent_wwpn,
>> * or parent_fabric_wwn) and drop the object lock. */
>
> ^This commentary got me thinking. There's a deadlock because of how the locks
> are acquired earlier in this function. Patch 14 solves the deadlock in exchange
> for a race, so see my comment in patch 14.
>
> [...]
I'll respond there. Not sure where the deadlock would be here, but maybe
the answer there will clear things up...
>> cleanup:
>> - if (obj)
>> - virNodeDeviceObjUnlock(obj);
>> + virNodeDeviceObjEndAPI(&obj);
>> testDriverUnlock(driver);
>> virNodeDeviceDefFree(def);
>> virObjectUnref(dev);
>> @@ -5596,13 +5595,13 @@ 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. */
>
> Not that this patch would be touching it directly, but ^this commentary is
> pretty much useless now, since @parent_name is useless in this function,
> nodeDeviceDestroy doesn't work that way anymore.
>
> Erik
>
Hmmm, I see said the blind man. Looks like commit id '7ad479d0b' should
have removed @parent_name as well.
That should be a separate patch - I can create and add it to the end.
John
More information about the libvir-list
mailing list