]> git.hungrycats.org Git - linux/commitdiff
[PATCH] USB: fix xsane breakage, hangs on device scan at launch
authorDavid Brownell <david-b@pacbell.net>
Wed, 7 Apr 2004 09:52:02 +0000 (02:52 -0700)
committerGreg Kroah-Hartman <greg@kroah.com>
Wed, 7 Apr 2004 09:52:02 +0000 (02:52 -0700)
Disable a usbfs disconnect() synchronization hack, which recently
started deadlocking because this routine is now called in a different
context.

It shouldn't be needed any longer now that usbcore shuts down endpoints
as part of driver unbinding.  (Except maybe on UHCI, which will have
canceled but not necessarily completed all requests.)

drivers/usb/core/devio.c

index ece587efd575b5d11aa6230e88482044931de390..ed1296ad92f7d3cb825ee2964de5038abb77b122 100644 (file)
@@ -339,18 +339,17 @@ static void driver_disconnect(struct usb_interface *intf)
        if (!ps)
                return;
 
-       /* this waits till synchronous requests complete */
-       down_write (&ps->devsem);
+       /* NOTE:  this relies on usbcore having canceled and completed
+        * all pending I/O requests; 2.6 does that.
+        */
 
        /* prevent new I/O requests */
        ps->dev = 0;
-       ps->ifclaimed = 0;
+       clear_bit(intf->cur_altsetting->desc.bInterfaceNumber, &ps->ifclaimed);
        usb_set_intfdata (intf, NULL);
 
        /* force async requests to complete */
        destroy_all_async (ps);
-
-       up_write (&ps->devsem);
 }
 
 struct usb_driver usbdevfs_driver = {