diff options
author | Alan Stern <stern@rowland.harvard.edu> | 2008-10-29 15:16:58 -0400 |
---|---|---|
committer | Greg Kroah-Hartman <gregkh@suse.de> | 2008-11-13 14:45:00 -0800 |
commit | 352d026338378b1f13f044e33c1047da6e470056 (patch) | |
tree | 92e178cc234bfd19f15e8623b1b92d21918cb3fa /drivers/usb/core/message.c | |
parent | 0047ca0a45c6a481abd467fb52d2a480ffc8c6b9 (diff) | |
download | op-kernel-dev-352d026338378b1f13f044e33c1047da6e470056.zip op-kernel-dev-352d026338378b1f13f044e33c1047da6e470056.tar.gz |
USB: don't register endpoints for interfaces that are going away
This patch (as1155) fixes a bug in usbcore. When interfaces are
deleted, either because the device was disconnected or because of a
configuration change, the extra attribute files and child endpoint
devices may get left behind. This is because the core removes them
before calling device_del(). But during device_del(), after the
driver is unbound the core will reinstall altsetting 0 and recreate
those extra attributes and children.
The patch prevents this by adding a flag to record when the interface
is in the midst of being unregistered. When the flag is set, the
attribute files and child devices will not be created.
Signed-off-by: Alan Stern <stern@rowland.harvard.edu>
Cc: stable <stable@kernel.org> [2.6.27, 2.6.26, 2.6.25]
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
Diffstat (limited to 'drivers/usb/core/message.c')
-rw-r--r-- | drivers/usb/core/message.c | 1 |
1 files changed, 1 insertions, 0 deletions
diff --git a/drivers/usb/core/message.c b/drivers/usb/core/message.c index 8877385..6d1048f 100644 --- a/drivers/usb/core/message.c +++ b/drivers/usb/core/message.c @@ -1091,6 +1091,7 @@ void usb_disable_device(struct usb_device *dev, int skip_ep0) continue; dev_dbg(&dev->dev, "unregistering interface %s\n", dev_name(&interface->dev)); + interface->unregistering = 1; usb_remove_sysfs_intf_files(interface); device_del(&interface->dev); } |