diff options
author | Alan Stern <stern@rowland.harvard.edu> | 2012-11-07 16:35:00 -0500 |
---|---|---|
committer | Greg Kroah-Hartman <gregkh@linuxfoundation.org> | 2012-11-11 18:10:46 -0800 |
commit | 2f02bc8af3abb846823811af65ec6cc46a4d525d (patch) | |
tree | d2d5930a67122733e3af7aee09560eebd2a912b3 | |
parent | 2656a9abcf1ec8dd5fee6a75d6997a0f2fa0094e (diff) | |
download | op-kernel-dev-2f02bc8af3abb846823811af65ec6cc46a4d525d.zip op-kernel-dev-2f02bc8af3abb846823811af65ec6cc46a4d525d.tar.gz |
USB: report submission of active URBs
This patch (as1633) changes slightly the way usbcore handled
submissions of URBs that are already active. It will now return
-EBUSY rather than -EINVAL, and it will call WARN_ONCE to draw
people's attention to the bug.
Signed-off-by: Alan Stern <stern@rowland.harvard.edu>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
-rw-r--r-- | Documentation/usb/error-codes.txt | 2 | ||||
-rw-r--r-- | drivers/usb/core/urb.c | 7 |
2 files changed, 8 insertions, 1 deletions
diff --git a/Documentation/usb/error-codes.txt b/Documentation/usb/error-codes.txt index 8d1e2a9..9c3eb84 100644 --- a/Documentation/usb/error-codes.txt +++ b/Documentation/usb/error-codes.txt @@ -21,6 +21,8 @@ Non-USB-specific: USB-specific: +-EBUSY The URB is already active. + -ENODEV specified USB-device or bus doesn't exist -ENOENT specified interface or endpoint does not exist or diff --git a/drivers/usb/core/urb.c b/drivers/usb/core/urb.c index 3662287..e0d9d94 100644 --- a/drivers/usb/core/urb.c +++ b/drivers/usb/core/urb.c @@ -321,8 +321,13 @@ int usb_submit_urb(struct urb *urb, gfp_t mem_flags) struct usb_host_endpoint *ep; int is_out; - if (!urb || urb->hcpriv || !urb->complete) + if (!urb || !urb->complete) return -EINVAL; + if (urb->hcpriv) { + WARN_ONCE(1, "URB %p submitted while active\n", urb); + return -EBUSY; + } + dev = urb->dev; if ((!dev) || (dev->state < USB_STATE_UNAUTHENTICATED)) return -ENODEV; |