Bluetooth: Skip the shutdown routine if the interface is not up
authorGabriele Mazzotta <gabriele.mzt@gmail.com>
Sun, 26 Apr 2015 18:51:50 +0000 (20:51 +0200)
committerMarcel Holtmann <marcel@holtmann.org>
Thu, 30 Apr 2015 16:45:27 +0000 (18:45 +0200)
Most likely, the shutdown routine requires the interface to be up.
This is the case for BTUSB_INTEL: the routine tries to send a command
to the interface, but since this one is down, it fails and exits once
HCI_INIT_TIMEOUT has expired.

Signed-off-by: Gabriele Mazzotta <gabriele.mzt@gmail.com>
Signed-off-by: Marcel Holtmann <marcel@holtmann.org>
Cc: stable@vger.kernel.org # 4.0.x
net/bluetooth/hci_core.c

index 476709bd068a474f7edcac83a4869849ccfb4b17..4663c3dad3f5f676e913cbc9f6a79d5efcecde4e 100644 (file)
@@ -1557,7 +1557,8 @@ static int hci_dev_do_close(struct hci_dev *hdev)
 {
        BT_DBG("%s %p", hdev->name, hdev);
 
-       if (!hci_dev_test_flag(hdev, HCI_UNREGISTER)) {
+       if (!hci_dev_test_flag(hdev, HCI_UNREGISTER) &&
+           test_bit(HCI_UP, &hdev->flags)) {
                /* Execute vendor specific shutdown routine */
                if (hdev->shutdown)
                        hdev->shutdown(hdev);