
From: David Brownell <david-b@pacbell.net>

I'm not getting it any more, but then I'm also running with
this patch too ... the current source prevents drivers from
properly disconnect()ing, which means all kinds of state
doesn't get cleaned up.

What usually gets me lately is that the whole system locks
up when I remove certain modules.  SysRq behaves but little
else (no console).  The common behavior seems to be that
the call_usermode_helper() logic is waiting forever; such
as waiting for network interface "remove" events to finish.



 drivers/usb/core/urb.c |    4 ++--
 1 files changed, 2 insertions(+), 2 deletions(-)

diff -puN drivers/usb/core/urb.c~usb-disconnect-crash-fix drivers/usb/core/urb.c
--- 25/drivers/usb/core/urb.c~usb-disconnect-crash-fix	2003-03-26 13:31:13.000000000 -0800
+++ 25-akpm/drivers/usb/core/urb.c	2003-03-26 13:31:13.000000000 -0800
@@ -384,11 +384,11 @@ int usb_unlink_urb(struct urb *urb)
 	/* FIXME
 	 * We should not care about the state here, but the host controllers
 	 * die a horrible death if we unlink a urb for a device that has been
-	 * physically removed.
+	 * physically removed.  (after driver->disconnect returns...)
 	 */
 	if (urb &&
 	    urb->dev &&
-	    (urb->dev->state >= USB_STATE_DEFAULT) &&
+	    // (urb->dev->state >= USB_STATE_DEFAULT) &&
 	    urb->dev->bus &&
 	    urb->dev->bus->op)
 		return urb->dev->bus->op->unlink_urb(urb);

_
