Bluetooth: Fix trying to initiate connections when acting as LE slave
authorJohan Hedberg <johan.hedberg@intel.com>
Wed, 16 Jul 2014 08:56:09 +0000 (11:56 +0300)
committerMarcel Holtmann <marcel@holtmann.org>
Wed, 16 Jul 2014 09:58:04 +0000 (11:58 +0200)
When we have at least one LE slave connection most (probably all)
controllers will refuse to initiate any new connections. To avoid
unnecessary failures simply check for this situation up-front and skip
the connection attempt.

Signed-off-by: Johan Hedberg <johan.hedberg@intel.com>
Signed-off-by: Marcel Holtmann <marcel@holtmann.org>
net/bluetooth/hci_event.c

index c68b93e11686e7f28064c39d22a9fb5af108f3fa..e54db7f0590bf2789c0a6ad8a385eadba1fd5f50 100644 (file)
@@ -4246,6 +4246,12 @@ static void check_pending_le_conn(struct hci_dev *hdev, bdaddr_t *addr,
        if (hci_bdaddr_list_lookup(&hdev->blacklist, addr, addr_type))
                return;
 
+       /* Most controller will fail if we try to create new connections
+        * while we have an existing one in slave role.
+        */
+       if (hdev->conn_hash.le_num_slave > 0)
+               return;
+
        /* If we're connectable, always connect any ADV_DIRECT_IND event */
        if (test_bit(HCI_CONNECTABLE, &hdev->dev_flags) &&
            adv_type == LE_ADV_DIRECT_IND)