[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