On Wed, Apr 13, 2005 at 09:40:17PM +0400, Roman Kagan wrote: > With 2.6.11 and 2.6.12-rc2 (and perhaps a few versions before) usb > drivers for multi-interface devices, which do > usb_driver_release_interface() in their disconnect(), make rmmod hang. > > It turns out to be due to a bug in drivers/base/bus.c:driver_detach(), > that iterates over the list of attached devices with > list_for_each_safe() under an assumption that device_release_driver() > only releases the current device, while it may also call > device_release_driver() for other devices on the same list. > > The following patch fixes it. Please consider applying. > > P.S. Similar thing for -mm tree with klists will be discussed > in another mail. > > Signed-off-by: Roman Kagan <[EMAIL PROTECTED]> > > bus.c | 5 ++--- > 1 files changed, 2 insertions(+), 3 deletions(-) > > --- linux-2.6.12-rc2/drivers/base/bus.c.orig 2005-03-18 04:34:06.000000000 > +0300 > +++ linux-2.6.12-rc2/drivers/base/bus.c 2005-04-13 08:45:48.000000000 > +0400 > @@ -405,9 +405,8 @@ void device_release_driver(struct device > > static void driver_detach(struct device_driver * drv) > { > - struct list_head * entry, * next; > - list_for_each_safe(entry, next, &drv->devices) { > - struct device * dev = container_of(entry, struct device, > driver_list); > + while (!list_empty(&drv->devices)) { > + struct device * dev = container_of(drv->devices.next, struct > device, driver_list); > device_release_driver(dev); > } > } >
Ping? This patch fixes a real and easy to trigger problem, so IMHO it may be worth applying before 2.6.12-final is out... Still trying to get in touch with Pat Mochel on that and especially on the more convoluted klist case, Roman. ------------------------------------------------------- SF email is sponsored by - The IT Product Guide Read honest & candid reviews on hundreds of IT Products from real users. Discover which products truly live up to the hype. Start reading now. http://ads.osdn.com/?ad_id=6595&alloc_id=14396&op=click _______________________________________________ linux-usb-devel@lists.sourceforge.net To unsubscribe, use the last form field at: https://lists.sourceforge.net/lists/listinfo/linux-usb-devel