Re: [PATCH] hci-usb bugfix

From: Marcel Holtmann
Date: Mon May 10 2004 - 05:47:07 EST


Hi Soeren,

> indeed it fixes this oops ... however I still get

please try the attached patch. It should fix it, too.

> usb 2-1: USB disconnect, address 4
> usb 2-1: new full speed USB device using address 5
> devfs_mk_dev: could not append to parent for bluetooth/rfcomm/0
> devfs_remove: bluetooth/rfcomm/0 not found, cannot remove
> Call trace:
> [c00099c4] dump_stack+0x18/0x28
> [c010af1c] devfs_remove+0xcc/0xd0
> [c01e4a5c] tty_unregister_device+0x30/0x5c
> [f2080b64] rfcomm_dev_destruct+0x50/0xd4 [rfcomm]
> [f2081310] rfcomm_release_dev+0xf8/0x148 [rfcomm]
> [f20807a8] rfcomm_sock_ioctl+0x34/0x58 [rfcomm]
> [c02a8668] sock_ioctl+0xc0/0x2c0
> [c00726e0] sys_ioctl+0x100/0x318
> [c0005d60] ret_from_syscall+0x0/0x44
> usb 2-1: USB disconnect, address 5

Do you use DevFS? Does the same problem exists if you disable it and use
udev instead?

Regards

Marcel

===== drivers/bluetooth/hci_usb.c 1.49 vs edited =====
--- 1.49/drivers/bluetooth/hci_usb.c Sat Apr 17 00:23:48 2004
+++ edited/drivers/bluetooth/hci_usb.c Mon May 10 12:03:05 2004
@@ -976,11 +971,13 @@
static void hci_usb_disconnect(struct usb_interface *intf)
{
struct hci_usb *husb = usb_get_intfdata(intf);
- struct hci_dev *hdev = husb->hdev;
+ struct hci_dev *hdev;

- if (!husb)
+ if (!husb || intf == husb->isoc_iface)
return;
+
usb_set_intfdata(intf, NULL);
+ hdev = husb->hdev;

BT_DBG("%s", hdev->name);