Re: [libvirt] [PATCH v6 5/9] nodedev: udev: Unlock the private data before setting up 'system' node

2017-10-19 Thread John Ferlan


On 10/19/2017 02:54 AM, Erik Skultety wrote:
> On Wed, Oct 18, 2017 at 05:13:41PM -0400, John Ferlan wrote:
>>
>>
>> On 10/18/2017 09:52 AM, Erik Skultety wrote:
>>> udevSetupSystemDev only needs the udev data lock to be locked because of
>>> calling udevGetDMIData which accesses some protected structure members,
>>> but it can do that on its own just fine, no need to hold the lock the
>>> whole time.
>>>
>>> Signed-off-by: Erik Skultety 
>>> ---
>>>  src/node_device/node_device_udev.c | 8 +---
>>>  1 file changed, 5 insertions(+), 3 deletions(-)
>>>
>>> diff --git a/src/node_device/node_device_udev.c 
>>> b/src/node_device/node_device_udev.c
>>> index e0e5ba799..6882517e6 100644
>>> --- a/src/node_device/node_device_udev.c
>>> +++ b/src/node_device/node_device_udev.c
>>> @@ -1719,6 +1719,7 @@ udevGetDMIData(virNodeDevCapSystemPtr syscap)
>>>  virNodeDevCapSystemHardwarePtr hardware = >hardware;
>>>  virNodeDevCapSystemFirmwarePtr firmware = >firmware;
>>>
>>> +virObjectLock(priv);
>>>  udev = udev_monitor_get_udev(priv->udev_monitor);
>>>
>>>  device = udev_device_new_from_syspath(udev, DMI_DEVPATH);
>>> @@ -1731,6 +1732,7 @@ udevGetDMIData(virNodeDevCapSystemPtr syscap)
>>
>>virObjectUnlock(priv);
>>
>> Pesky return statements ;-)
>>
> 
> Wow, you really must have been a sharpshooter in the previous life ;), thanks 
> a
> lot.
> 
> Erik
> 

Sadly they seem to work better when reviewing code... They often fail me
on my own code ;-)

John

--
libvir-list mailing list
libvir-list@redhat.com
https://www.redhat.com/mailman/listinfo/libvir-list


Re: [libvirt] [PATCH v6 5/9] nodedev: udev: Unlock the private data before setting up 'system' node

2017-10-19 Thread Erik Skultety
On Wed, Oct 18, 2017 at 05:13:41PM -0400, John Ferlan wrote:
>
>
> On 10/18/2017 09:52 AM, Erik Skultety wrote:
> > udevSetupSystemDev only needs the udev data lock to be locked because of
> > calling udevGetDMIData which accesses some protected structure members,
> > but it can do that on its own just fine, no need to hold the lock the
> > whole time.
> >
> > Signed-off-by: Erik Skultety 
> > ---
> >  src/node_device/node_device_udev.c | 8 +---
> >  1 file changed, 5 insertions(+), 3 deletions(-)
> >
> > diff --git a/src/node_device/node_device_udev.c 
> > b/src/node_device/node_device_udev.c
> > index e0e5ba799..6882517e6 100644
> > --- a/src/node_device/node_device_udev.c
> > +++ b/src/node_device/node_device_udev.c
> > @@ -1719,6 +1719,7 @@ udevGetDMIData(virNodeDevCapSystemPtr syscap)
> >  virNodeDevCapSystemHardwarePtr hardware = >hardware;
> >  virNodeDevCapSystemFirmwarePtr firmware = >firmware;
> >
> > +virObjectLock(priv);
> >  udev = udev_monitor_get_udev(priv->udev_monitor);
> >
> >  device = udev_device_new_from_syspath(udev, DMI_DEVPATH);
> > @@ -1731,6 +1732,7 @@ udevGetDMIData(virNodeDevCapSystemPtr syscap)
>
>virObjectUnlock(priv);
>
> Pesky return statements ;-)
>

Wow, you really must have been a sharpshooter in the previous life ;), thanks a
lot.

Erik

--
libvir-list mailing list
libvir-list@redhat.com
https://www.redhat.com/mailman/listinfo/libvir-list


Re: [libvirt] [PATCH v6 5/9] nodedev: udev: Unlock the private data before setting up 'system' node

2017-10-18 Thread John Ferlan


On 10/18/2017 09:52 AM, Erik Skultety wrote:
> udevSetupSystemDev only needs the udev data lock to be locked because of
> calling udevGetDMIData which accesses some protected structure members,
> but it can do that on its own just fine, no need to hold the lock the
> whole time.
> 
> Signed-off-by: Erik Skultety 
> ---
>  src/node_device/node_device_udev.c | 8 +---
>  1 file changed, 5 insertions(+), 3 deletions(-)
> 
> diff --git a/src/node_device/node_device_udev.c 
> b/src/node_device/node_device_udev.c
> index e0e5ba799..6882517e6 100644
> --- a/src/node_device/node_device_udev.c
> +++ b/src/node_device/node_device_udev.c
> @@ -1719,6 +1719,7 @@ udevGetDMIData(virNodeDevCapSystemPtr syscap)
>  virNodeDevCapSystemHardwarePtr hardware = >hardware;
>  virNodeDevCapSystemFirmwarePtr firmware = >firmware;
>  
> +virObjectLock(priv);
>  udev = udev_monitor_get_udev(priv->udev_monitor);
>  
>  device = udev_device_new_from_syspath(udev, DMI_DEVPATH);
> @@ -1731,6 +1732,7 @@ udevGetDMIData(virNodeDevCapSystemPtr syscap)

   virObjectUnlock(priv);

Pesky return statements ;-)

John

>  return;
>  }
>  }
> +virObjectUnlock(priv);
>  
>  if (udevGetStringSysfsAttr(device, "product_name",
> >product_name) < 0)
> @@ -1898,11 +1900,11 @@ nodeStateInitialize(bool privileged,
>  if (priv->watch == -1)
>  goto unlock;
>  
> +virObjectUnlock(priv);
> +
>  /* Create a fictional 'computer' device to root the device tree. */
>  if (udevSetupSystemDev() != 0)
> -goto unlock;
> -
> -virObjectUnlock(priv);
> +goto cleanup;
>  
>  /* Populate with known devices */
>  if (udevEnumerateDevices(udev) != 0)
> 

--
libvir-list mailing list
libvir-list@redhat.com
https://www.redhat.com/mailman/listinfo/libvir-list


[libvirt] [PATCH v6 5/9] nodedev: udev: Unlock the private data before setting up 'system' node

2017-10-18 Thread Erik Skultety
udevSetupSystemDev only needs the udev data lock to be locked because of
calling udevGetDMIData which accesses some protected structure members,
but it can do that on its own just fine, no need to hold the lock the
whole time.

Signed-off-by: Erik Skultety 
---
 src/node_device/node_device_udev.c | 8 +---
 1 file changed, 5 insertions(+), 3 deletions(-)

diff --git a/src/node_device/node_device_udev.c 
b/src/node_device/node_device_udev.c
index e0e5ba799..6882517e6 100644
--- a/src/node_device/node_device_udev.c
+++ b/src/node_device/node_device_udev.c
@@ -1719,6 +1719,7 @@ udevGetDMIData(virNodeDevCapSystemPtr syscap)
 virNodeDevCapSystemHardwarePtr hardware = >hardware;
 virNodeDevCapSystemFirmwarePtr firmware = >firmware;
 
+virObjectLock(priv);
 udev = udev_monitor_get_udev(priv->udev_monitor);
 
 device = udev_device_new_from_syspath(udev, DMI_DEVPATH);
@@ -1731,6 +1732,7 @@ udevGetDMIData(virNodeDevCapSystemPtr syscap)
 return;
 }
 }
+virObjectUnlock(priv);
 
 if (udevGetStringSysfsAttr(device, "product_name",
>product_name) < 0)
@@ -1898,11 +1900,11 @@ nodeStateInitialize(bool privileged,
 if (priv->watch == -1)
 goto unlock;
 
+virObjectUnlock(priv);
+
 /* Create a fictional 'computer' device to root the device tree. */
 if (udevSetupSystemDev() != 0)
-goto unlock;
-
-virObjectUnlock(priv);
+goto cleanup;
 
 /* Populate with known devices */
 if (udevEnumerateDevices(udev) != 0)
-- 
2.13.6

--
libvir-list mailing list
libvir-list@redhat.com
https://www.redhat.com/mailman/listinfo/libvir-list