[PATCH] usb-storage: wait for URB to complete
authorAlan Stern <stern@rowland.harvard.edu>
Mon, 10 Jul 2006 11:44:47 +0000 (04:44 -0700)
committerLinus Torvalds <torvalds@g5.osdl.org>
Mon, 10 Jul 2006 20:24:21 +0000 (13:24 -0700)
We all failed to notice that Franck's recent update to usb-storage allowed
an URB to complete after its context data was no longer valid.  This patch
(as746) makes the driver wait for the URB to complete whenever there's a
timeout.

Although timeouts in usb-storage are relatively uncommon, they do occur.
Without this patch the code in 2.6.18-rc1 will fault within an interrupt
handler, which is not nice at all.

Signed-off-by: Alan Stern <stern@rowland.harvard.edu>
Cc: Greg KH <greg@kroah.com>
Signed-off-by: Andrew Morton <akpm@osdl.org>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>
drivers/usb/storage/transport.c

index eb7188b3565c840622e05c2663517de512fb0549..d6acc92a4ae36ac66757450f9522f7cb667128f6 100644 (file)
@@ -180,7 +180,7 @@ static int usb_stor_msg_common(struct us_data *us, int timeout)
        if (timeleft <= 0) {
                US_DEBUGP("%s -- cancelling URB\n",
                          timeleft == 0 ? "Timeout" : "Signal");
-               usb_unlink_urb(us->current_urb);
+               usb_kill_urb(us->current_urb);
        }
 
        /* return the URB status */