aboutsummaryrefslogtreecommitdiffstats
path: root/net/bluetooth/hci_event.c
diff options
context:
space:
mode:
authorAndre Guedes <andre.guedes@openbossa.org>2013-11-07 15:36:09 -0500
committerGustavo Padovan <gustavo.padovan@collabora.co.uk>2013-12-04 08:09:04 -0500
commitabf54a506d06e0b3ba2c408040e647791af37937 (patch)
tree75e92e24581fe006f8ac1aec97571b7fea3691b0 /net/bluetooth/hci_event.c
parent35580d223b6b04d9a570e4fe377c46a102413fe8 (diff)
Bluetooth: Remove unneeded check in hci_disconn_complete_evt()
According to b644ba336 (patch that introduced HCI_CONN_MGMT_CONNECTED flag), the HCI_CONN_MGMT_CONNECTED flag tracks when mgmt has been notified about the connection. That being said, there is no point in calling mgmt_disconnect_failed() conditionally based on this flag. mgmt_disconnect_failed() removes pending MGMT_OP_DISCONNECT commands, it doesn't matter if that connection was notified or not. Moreover, if the Disconnection Complete event has status then we have nothing else to do but call mgmt_disconnect_failed() and return. Signed-off-by: Andre Guedes <andre.guedes@openbossa.org> Signed-off-by: Johan Hedberg <johan.hedberg@intel.com>
Diffstat (limited to 'net/bluetooth/hci_event.c')
-rw-r--r--net/bluetooth/hci_event.c19
1 files changed, 9 insertions, 10 deletions
diff --git a/net/bluetooth/hci_event.c b/net/bluetooth/hci_event.c
index 142aa61f9c3f..eb99a12948c5 100644
--- a/net/bluetooth/hci_event.c
+++ b/net/bluetooth/hci_event.c
@@ -1779,6 +1779,7 @@ static u8 hci_to_mgmt_reason(u8 err)
1779static void hci_disconn_complete_evt(struct hci_dev *hdev, struct sk_buff *skb) 1779static void hci_disconn_complete_evt(struct hci_dev *hdev, struct sk_buff *skb)
1780{ 1780{
1781 struct hci_ev_disconn_complete *ev = (void *) skb->data; 1781 struct hci_ev_disconn_complete *ev = (void *) skb->data;
1782 u8 reason = hci_to_mgmt_reason(ev->reason);
1782 struct hci_conn *conn; 1783 struct hci_conn *conn;
1783 1784
1784 BT_DBG("%s status 0x%2.2x", hdev->name, ev->status); 1785 BT_DBG("%s status 0x%2.2x", hdev->name, ev->status);
@@ -1792,18 +1793,16 @@ static void hci_disconn_complete_evt(struct hci_dev *hdev, struct sk_buff *skb)
1792 if (ev->status == 0) 1793 if (ev->status == 0)
1793 conn->state = BT_CLOSED; 1794 conn->state = BT_CLOSED;
1794 1795
1795 if (test_and_clear_bit(HCI_CONN_MGMT_CONNECTED, &conn->flags)) { 1796 if (ev->status) {
1796 if (ev->status) { 1797 mgmt_disconnect_failed(hdev, &conn->dst, conn->type,
1797 mgmt_disconnect_failed(hdev, &conn->dst, conn->type, 1798 conn->dst_type, ev->status);
1798 conn->dst_type, ev->status); 1799 goto unlock;
1799 } else {
1800 u8 reason = hci_to_mgmt_reason(ev->reason);
1801
1802 mgmt_device_disconnected(hdev, &conn->dst, conn->type,
1803 conn->dst_type, reason);
1804 }
1805 } 1800 }
1806 1801
1802 if (test_and_clear_bit(HCI_CONN_MGMT_CONNECTED, &conn->flags))
1803 mgmt_device_disconnected(hdev, &conn->dst, conn->type,
1804 conn->dst_type, reason);
1805
1807 if (ev->status == 0) { 1806 if (ev->status == 0) {
1808 u8 type = conn->type; 1807 u8 type = conn->type;
1809 1808