From: David Brownell 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); _