[libvirt] [PATCH] node device driver: update driver name during dumpxml

Daniel Veillard veillard at redhat.com
Mon Jul 1 04:24:02 UTC 2013


On Sun, Jun 30, 2013 at 02:55:51PM -0400, Laine Stump wrote:
> This fixes:
> 
>   https://bugzilla.redhat.com/show_bug.cgi?id=979290
>   https://bugzilla.redhat.com/show_bug.cgi?id=979330
> 
> The node device driver was written with the assumption that udev would
> use a "change" event to notify libvirt of any change to device status
> (including the name of the driver it was bound to). It turns out this
> is not the case (see Comment 4 of BZ 979290). That means that a
> dumpxml for a device would always show whatever driver happened to be
> bound at the time libvirt was started (when the node device cache was
> built).
> 
> There was already code in the driver (for the benefit of the HAL
> backend) that updated the driver name from sysfs each time a device's
> info was retrieved from the cache. This patch just enables that manual
> update for the udev backend as well.
> ---
>  src/node_device/node_device_driver.c | 13 +++++++++----
>  1 file changed, 9 insertions(+), 4 deletions(-)
> 
> diff --git a/src/node_device/node_device_driver.c b/src/node_device/node_device_driver.c
> index 67e90a1..8e6911a 100644
> --- a/src/node_device/node_device_driver.c
> +++ b/src/node_device/node_device_driver.c
> @@ -60,10 +60,15 @@ static int update_caps(virNodeDeviceObjPtr dev)
>  }
>  
>  
> -#if defined (__linux__) && defined (WITH_HAL)
> -/* Under libudev changes to the driver name should be picked up as
> - * "change" events, so we don't call update driver name unless we're
> - * using the HAL backend. */
> +#if defined (__linux__) && ( defined (WITH_HAL) || defined(WITH_UDEV))
> +/* NB: It was previously believed that changes in driver name were
> + * relayed to libvirt as "change" events by udev, and the udev event
> + * notification is setup to recognize such events and effectively
> + * recreate the device entry in the cache. However, neither the kernel
> + * nor udev sends such an event, so it is necessary to manually update
> + * the driver name for a device each time its entry is used, both for
> + * udev *and* HAL backends.
> + */
>  static int update_driver_name(virNodeDeviceObjPtr dev)
>  {
>      char *driver_link = NULL;
> -- 
> 1.7.11.7
> 

  ACK,

Daniel

-- 
Daniel Veillard      | Open Source and Standards, Red Hat
veillard at redhat.com  | libxml Gnome XML XSLT toolkit  http://xmlsoft.org/
http://veillard.com/ | virtualization library  http://libvirt.org/




More information about the libvir-list mailing list