• Alan Stern's avatar
    USB: implement "soft" unbinding · 9da82bd4
    Alan Stern authored
    This patch (as1091) changes the way usbcore handles interface
    unbinding.  If the interface's driver supports "soft" unbinding (a new
    flag in the driver structure) then in-flight URBs are not cancelled
    and endpoints are not disabled.  Instead the driver is allowed to
    continue communicating with the device (although of course it should
    stop before its disconnect routine returns).
    
    The purpose of this change is to allow drivers to do a clean shutdown
    when they get unbound from a device that is still plugged in.  Killing
    all the URBs and disabling the endpoints before calling the driver's
    disconnect method doesn't give the driver any control over what
    happens, and it can leave devices in indeterminate states.  For
    example, when usb-storage unbinds it doesn't want to stop while in the
    middle of transmitting a SCSI command.
    
    The soft_unbind flag is added because in the past, a number of drivers
    have experienced problems related to ongoing I/O after their disconnect
    routine returned.  Hence "soft" unbinding is made available only to
    drivers that claim to support it.
    
    The patch also replaces "interface_to_usbdev(intf)" with "udev" in a
    couple of places, a minor simplification.
    Signed-off-by: default avatarAlan Stern <stern@rowland.harvard.edu>
    Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@suse.de>
    9da82bd4
driver.c 46.5 KB