aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/bluetooth/btusb.c
diff options
context:
space:
mode:
authorMarcel Holtmann <marcel@holtmann.org>2008-09-22 18:16:36 -0400
committerMarcel Holtmann <marcel@holtmann.org>2008-09-22 18:16:36 -0400
commite8c3c3d22b340a406a9aab1b7a9f436636c3de9d (patch)
tree24936b533522e656e4aef9e59e6427cc942e559e /drivers/bluetooth/btusb.c
parentbdbef3d696ca83489eb653459b5a7a62ecf5596a (diff)
[Bluetooth] Fix wrong URB handling of btusb driver
The btusb driver contains two typos that result in some buggy behavior, but the impact is not immediately visible. During initialization the submitting of interrupt URBs might fail and then make sure to remove the correct flag and not one of the hci_dev flags. When closing down the interface make sure to kill the anchor for the ISOC URBs and not kill the interrupt URBs twice. Also cancel any scheduled work when closing down the interface. Signed-off-by: Marcel Holtmann <marcel@holtmann.org>
Diffstat (limited to 'drivers/bluetooth/btusb.c')
-rw-r--r--drivers/bluetooth/btusb.c6
1 files changed, 4 insertions, 2 deletions
diff --git a/drivers/bluetooth/btusb.c b/drivers/bluetooth/btusb.c
index 7665347238c7..b4756a6a3a68 100644
--- a/drivers/bluetooth/btusb.c
+++ b/drivers/bluetooth/btusb.c
@@ -519,7 +519,7 @@ static int btusb_open(struct hci_dev *hdev)
519 519
520 err = btusb_submit_intr_urb(hdev); 520 err = btusb_submit_intr_urb(hdev);
521 if (err < 0) { 521 if (err < 0) {
522 clear_bit(BTUSB_INTR_RUNNING, &hdev->flags); 522 clear_bit(BTUSB_INTR_RUNNING, &data->flags);
523 clear_bit(HCI_RUNNING, &hdev->flags); 523 clear_bit(HCI_RUNNING, &hdev->flags);
524 } 524 }
525 525
@@ -535,8 +535,10 @@ static int btusb_close(struct hci_dev *hdev)
535 if (!test_and_clear_bit(HCI_RUNNING, &hdev->flags)) 535 if (!test_and_clear_bit(HCI_RUNNING, &hdev->flags))
536 return 0; 536 return 0;
537 537
538 cancel_work_sync(&data->work);
539
538 clear_bit(BTUSB_ISOC_RUNNING, &data->flags); 540 clear_bit(BTUSB_ISOC_RUNNING, &data->flags);
539 usb_kill_anchored_urbs(&data->intr_anchor); 541 usb_kill_anchored_urbs(&data->isoc_anchor);
540 542
541 clear_bit(BTUSB_BULK_RUNNING, &data->flags); 543 clear_bit(BTUSB_BULK_RUNNING, &data->flags);
542 usb_kill_anchored_urbs(&data->bulk_anchor); 544 usb_kill_anchored_urbs(&data->bulk_anchor);