diff options
author | Andre Guedes <andre.guedes@openbossa.org> | 2013-11-07 15:36:09 -0500 |
---|---|---|
committer | Gustavo Padovan <gustavo.padovan@collabora.co.uk> | 2013-12-04 08:09:04 -0500 |
commit | abf54a506d06e0b3ba2c408040e647791af37937 (patch) | |
tree | 75e92e24581fe006f8ac1aec97571b7fea3691b0 /net/bluetooth/hci_event.c | |
parent | 35580d223b6b04d9a570e4fe377c46a102413fe8 (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.c | 19 |
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) | |||
1779 | static void hci_disconn_complete_evt(struct hci_dev *hdev, struct sk_buff *skb) | 1779 | static 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 | ||