mirror of
https://github.com/torvalds/linux.git
synced 2024-11-12 07:01:57 +00:00
[PATCH] usbcore: Don't call device_release_driver recursively
This patch fixes usb_driver_release_interface() to make it avoid calling device_release_driver() recursively, i.e., when invoked from within the disconnect routine for the same device. The patch applies to your "driver" tree. Signed-off-by: Alan Stern <stern@rowland.harvard.edu> Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
This commit is contained in:
parent
c95a6b057b
commit
f409661877
@ -322,9 +322,15 @@ void usb_driver_release_interface(struct usb_driver *driver,
|
||||
if (!dev->driver || dev->driver != &driver->driver)
|
||||
return;
|
||||
|
||||
/* don't disconnect from disconnect(), or before dev_add() */
|
||||
if (!klist_node_attached(&dev->knode_driver) && !klist_node_attached(&dev->knode_bus))
|
||||
/* don't release from within disconnect() */
|
||||
if (iface->condition != USB_INTERFACE_BOUND)
|
||||
return;
|
||||
|
||||
/* release only after device_add() */
|
||||
if (klist_node_attached(&dev->knode_bus)) {
|
||||
iface->condition = USB_INTERFACE_UNBINDING;
|
||||
device_release_driver(dev);
|
||||
}
|
||||
|
||||
dev->driver = NULL;
|
||||
usb_set_intfdata(iface, NULL);
|
||||
|
Loading…
Reference in New Issue
Block a user