USB: usbfs: allow URBs to be reaped after disconnection
authorAlan Stern <stern@rowland.harvard.edu>
Thu, 29 Jan 2015 16:29:13 +0000 (11:29 -0500)
committerGreg Kroah-Hartman <greg@kroah.com>
Sat, 31 Jan 2015 17:05:06 +0000 (09:05 -0800)
commit3f2cee73b650921b2e214bf487b2061a1c266504
treed1dddbfd38a52fc0b66b7fca36dc8ad8efb671ca
parent17136d4984b37d2a9acb67e1da1a3e95e3fed918
USB: usbfs: allow URBs to be reaped after disconnection

The usbfs API has a peculiar hole: Users are not allowed to reap their
URBs after the device has been disconnected.  There doesn't seem to be
any good reason for this; it is an ad-hoc inconsistency.

The patch allows users to issue the USBDEVFS_REAPURB and
USBDEVFS_REAPURBNDELAY ioctls (together with their 32-bit counterparts
on 64-bit systems) even after the device is gone.  If no URBs are
pending for a disconnected device then the ioctls will return -ENODEV
rather than -EAGAIN, because obviously no new URBs will ever be able
to complete.

The patch also adds a new capability flag for
USBDEVFS_GET_CAPABILITIES to indicate that the reap-after-disconnect
feature is supported.

Signed-off-by: Alan Stern <stern@rowland.harvard.edu>
Tested-by: Chris Dickens <christopher.a.dickens@gmail.com>
Acked-by: Hans de Goede <hdegoede@redhat.com>
Signed-off-by: Greg Kroah-Hartman <greg@kroah.com>
drivers/usb/core/devio.c
include/uapi/linux/usbdevice_fs.h