[2 USB patches to be applied to the latest -bk tree, both fixing real bugs. I figured it's easier than creating a whole bk tree for them]
This patch fixes a bug in the usbfs code. The driver is too zealous about checking for disconnected devices before doing things. In particular, it is necessary to reap all outstanding asynchronous URBs and unbind from interfaces when the device file is closed, even if the device is no longer connected. Signed-off-by: Alan Stern <[EMAIL PROTECTED]> Signed-off-by: Greg Kroah-Hartman <[EMAIL PROTECTED]> diff -Nru a/drivers/usb/core/devio.c b/drivers/usb/core/devio.c --- a/drivers/usb/core/devio.c 2004-12-16 15:35:55 -08:00 +++ b/drivers/usb/core/devio.c 2004-12-16 15:35:55 -08:00 @@ -523,13 +523,12 @@ usb_lock_device(dev); list_del_init(&ps->list); - - if (connected(dev)) { - for (ifnum = 0; ps->ifclaimed && ifnum < 8*sizeof(ps->ifclaimed); ifnum++) - if (test_bit(ifnum, &ps->ifclaimed)) - releaseintf(ps, ifnum); - destroy_all_async(ps); + for (ifnum = 0; ps->ifclaimed && ifnum < 8*sizeof(ps->ifclaimed); + ifnum++) { + if (test_bit(ifnum, &ps->ifclaimed)) + releaseintf(ps, ifnum); } + destroy_all_async(ps); usb_unlock_device(dev); usb_put_dev(dev); ps->dev = NULL; @@ -1034,7 +1033,7 @@ int ret; add_wait_queue(&ps->wait, &wait); - while (connected(dev)) { + for (;;) { __set_current_state(TASK_INTERRUPTIBLE); if ((as = async_getcompleted(ps))) break; ------------------------------------------------------- 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://productguide.itmanagersjournal.com/ _______________________________________________ [EMAIL PROTECTED] To unsubscribe, use the last form field at: https://lists.sourceforge.net/lists/listinfo/linux-usb-devel