Bluetooth: Refactor hci_cs_le_create_conn
authorAndre Guedes <andre.guedes@openbossa.org>
Fri, 27 Jul 2012 18:10:13 +0000 (15:10 -0300)
committerGustavo Padovan <gustavo.padovan@collabora.co.uk>
Mon, 6 Aug 2012 18:07:05 +0000 (15:07 -0300)
This patch does some code refactoring in hci_cs_le_create_conn
function. The hci_conn object is only needed in case of failure,
therefore hdev locking and hci_conn lookup were moved to
if-statement scope.

Also, the conn->state check was removed since we should always
close the connection if it fails.

Signed-off-by: Andre Guedes <andre.guedes@openbossa.org>
Signed-off-by: Gustavo Padovan <gustavo.padovan@collabora.co.uk>
net/bluetooth/hci_event.c

index 27064beda10d84784445557c0f173e1ae69a3091..c0aa9f436998d42987e1a4dbc2ad8712f6518924 100644 (file)
@@ -1623,24 +1623,26 @@ static void hci_cs_le_create_conn(struct hci_dev *hdev, __u8 status)
        if (!cp)
                return;
 
-       hci_dev_lock(hdev);
+       if (status) {
+               hci_dev_lock(hdev);
 
-       conn = hci_conn_hash_lookup_ba(hdev, LE_LINK, &cp->peer_addr);
+               conn = hci_conn_hash_lookup_ba(hdev, LE_LINK, &cp->peer_addr);
+               if (!conn) {
+                       hci_dev_unlock(hdev);
+                       return;
+               }
 
-       BT_DBG("%s bdaddr %s conn %p", hdev->name, batostr(&cp->peer_addr),
-              conn);
+               BT_DBG("%s bdaddr %s conn %p", hdev->name, batostr(&cp->peer_addr),
+                      conn);
 
-       if (status) {
-               if (conn && conn->state == BT_CONNECT) {
-                       conn->state = BT_CLOSED;
-                       mgmt_connect_failed(hdev, &cp->peer_addr, conn->type,
-                                           conn->dst_type, status);
-                       hci_proto_connect_cfm(conn, status);
-                       hci_conn_del(conn);
-               }
-       }
+               conn->state = BT_CLOSED;
+               mgmt_connect_failed(hdev, &cp->peer_addr, conn->type,
+                                   conn->dst_type, status);
+               hci_proto_connect_cfm(conn, status);
+               hci_conn_del(conn);
 
-       hci_dev_unlock(hdev);
+               hci_dev_unlock(hdev);
+       }
 }
 
 static void hci_cs_le_start_enc(struct hci_dev *hdev, u8 status)