aboutsummaryrefslogtreecommitdiffstats
path: root/net/bluetooth/hci_event.c
diff options
context:
space:
mode:
authorAndre Guedes <andre.guedes@openbossa.org>2012-07-27 14:10:14 -0400
committerGustavo Padovan <gustavo.padovan@collabora.co.uk>2012-08-06 14:07:49 -0400
commit0c95ab78be36e56ca69e36bc679f9dfd3d25f31e (patch)
treeadbbd3ad1892db80756656385f148e15c8c6fa13 /net/bluetooth/hci_event.c
parentf00a06ac14becc3d78fecdf2513cc23ee267a96b (diff)
Bluetooth: Find hci_conn by BT_CONNECT state
This patch changes hci_cs_le_create_conn to perform hci_conn lookup by state instead of bdaddr. Since we can have only one LE connection in BT_CONNECT state, we can perform LE hci_conn lookup by state. This way, we don't rely on hci_sent_cmd_data helper to find the hci_conn object. Signed-off-by: Andre Guedes <andre.guedes@openbossa.org> Signed-off-by: Gustavo Padovan <gustavo.padovan@collabora.co.uk>
Diffstat (limited to 'net/bluetooth/hci_event.c')
-rw-r--r--net/bluetooth/hci_event.c11
1 files changed, 3 insertions, 8 deletions
diff --git a/net/bluetooth/hci_event.c b/net/bluetooth/hci_event.c
index c0aa9f436998..8dc1f0fbe9c1 100644
--- a/net/bluetooth/hci_event.c
+++ b/net/bluetooth/hci_event.c
@@ -1614,29 +1614,24 @@ static void hci_cs_disconnect(struct hci_dev *hdev, u8 status)
1614 1614
1615static void hci_cs_le_create_conn(struct hci_dev *hdev, __u8 status) 1615static void hci_cs_le_create_conn(struct hci_dev *hdev, __u8 status)
1616{ 1616{
1617 struct hci_cp_le_create_conn *cp;
1618 struct hci_conn *conn; 1617 struct hci_conn *conn;
1619 1618
1620 BT_DBG("%s status 0x%2.2x", hdev->name, status); 1619 BT_DBG("%s status 0x%2.2x", hdev->name, status);
1621 1620
1622 cp = hci_sent_cmd_data(hdev, HCI_OP_LE_CREATE_CONN);
1623 if (!cp)
1624 return;
1625
1626 if (status) { 1621 if (status) {
1627 hci_dev_lock(hdev); 1622 hci_dev_lock(hdev);
1628 1623
1629 conn = hci_conn_hash_lookup_ba(hdev, LE_LINK, &cp->peer_addr); 1624 conn = hci_conn_hash_lookup_state(hdev, LE_LINK, BT_CONNECT);
1630 if (!conn) { 1625 if (!conn) {
1631 hci_dev_unlock(hdev); 1626 hci_dev_unlock(hdev);
1632 return; 1627 return;
1633 } 1628 }
1634 1629
1635 BT_DBG("%s bdaddr %s conn %p", hdev->name, batostr(&cp->peer_addr), 1630 BT_DBG("%s bdaddr %s conn %p", hdev->name, batostr(&conn->dst),
1636 conn); 1631 conn);
1637 1632
1638 conn->state = BT_CLOSED; 1633 conn->state = BT_CLOSED;
1639 mgmt_connect_failed(hdev, &cp->peer_addr, conn->type, 1634 mgmt_connect_failed(hdev, &conn->dst, conn->type,
1640 conn->dst_type, status); 1635 conn->dst_type, status);
1641 hci_proto_connect_cfm(conn, status); 1636 hci_proto_connect_cfm(conn, status);
1642 hci_conn_del(conn); 1637 hci_conn_del(conn);