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@xxxxxxxxxx | libxml Gnome XML XSLT toolkit http://xmlsoft.org/ http://veillard.com/ | virtualization library http://libvirt.org/ -- libvir-list mailing list libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list