• A
    usbfs: send disconnect signals when device is unregistered · cd9f0375
    Alan Stern 提交于
    USB device files are accessible in two ways: as files in usbfs and as
    character device nodes.  The two paths are supposed to behave
    identically, but they don't.  When the underlying USB device is
    unplugged, disconnect signals are sent to processes with open usbfs
    files (if they requested these signals) but not to processes with open
    device node files.
    
    This patch (as1104) fixes the bug by moving the disconnect-signalling
    code into a common subroutine which is called from both paths.
    Putting this subroutine in devio.c removes the only out-of-file
    reference to struct dev_state, and so the structure's declaration can
    be moved from usb.h into devio.c.
    
    Finally, the new subroutine performs one extra action: It kills all
    the outstanding async URBs.  (I'd kill the outstanding synchronous
    URBs too, if there was any way to do it.)  In the past this hasn't
    mattered much, because devices were unregistered from usbfs only
    when they were disconnected.  But now the unregistration can also
    occur whenever devices are unbound from the usb_generic driver.  At
    any rate, killing URBs when a device is unregistered from usbfs seems
    like a good thing to do.
    Signed-off-by: NAlan Stern <stern@rowland.harvard.edu>
    Signed-off-by: NGreg Kroah-Hartman <gregkh@suse.de>
    cd9f0375
devio.c 44.0 KB