Loading include/net/bluetooth/hci_core.h +2 −0 Original line number Diff line number Diff line Loading @@ -464,6 +464,8 @@ struct hci_conn_params { HCI_AUTO_CONN_ALWAYS, HCI_AUTO_CONN_LINK_LOSS, } auto_connect; struct hci_conn *conn; }; extern struct list_head hci_dev_list; Loading include/net/netns/ieee802154_6lowpan.h +0 −1 Original line number Diff line number Diff line Loading @@ -16,7 +16,6 @@ struct netns_sysctl_lowpan { struct netns_ieee802154_lowpan { struct netns_sysctl_lowpan sysctl; struct netns_frags frags; int max_dsize; }; #endif net/bluetooth/hci_conn.c +8 −0 Original line number Diff line number Diff line Loading @@ -589,6 +589,14 @@ EXPORT_SYMBOL(hci_get_route); void hci_le_conn_failed(struct hci_conn *conn, u8 status) { struct hci_dev *hdev = conn->hdev; struct hci_conn_params *params; params = hci_pend_le_action_lookup(&hdev->pend_le_conns, &conn->dst, conn->dst_type); if (params && params->conn) { hci_conn_drop(params->conn); params->conn = NULL; } conn->state = BT_CLOSED; Loading net/bluetooth/hci_core.c +12 −2 Original line number Diff line number Diff line Loading @@ -2536,8 +2536,13 @@ static void hci_pend_le_actions_clear(struct hci_dev *hdev) { struct hci_conn_params *p; list_for_each_entry(p, &hdev->le_conn_params, list) list_for_each_entry(p, &hdev->le_conn_params, list) { if (p->conn) { hci_conn_drop(p->conn); p->conn = NULL; } list_del_init(&p->action); } BT_DBG("All LE pending actions cleared"); } Loading Loading @@ -2578,8 +2583,8 @@ static int hci_dev_do_close(struct hci_dev *hdev) hci_dev_lock(hdev); hci_inquiry_cache_flush(hdev); hci_conn_hash_flush(hdev); hci_pend_le_actions_clear(hdev); hci_conn_hash_flush(hdev); hci_dev_unlock(hdev); hci_notify(hdev, HCI_DEV_DOWN); Loading Loading @@ -3727,6 +3732,9 @@ void hci_conn_params_del(struct hci_dev *hdev, bdaddr_t *addr, u8 addr_type) if (!params) return; if (params->conn) hci_conn_drop(params->conn); list_del(¶ms->action); list_del(¶ms->list); kfree(params); Loading Loading @@ -3757,6 +3765,8 @@ void hci_conn_params_clear_all(struct hci_dev *hdev) struct hci_conn_params *params, *tmp; list_for_each_entry_safe(params, tmp, &hdev->le_conn_params, list) { if (params->conn) hci_conn_drop(params->conn); list_del(¶ms->action); list_del(¶ms->list); kfree(params); Loading net/bluetooth/hci_event.c +15 −2 Original line number Diff line number Diff line Loading @@ -4221,8 +4221,13 @@ static void hci_le_conn_complete_evt(struct hci_dev *hdev, struct sk_buff *skb) hci_proto_connect_cfm(conn, ev->status); params = hci_conn_params_lookup(hdev, &conn->dst, conn->dst_type); if (params) if (params) { list_del_init(¶ms->action); if (params->conn) { hci_conn_drop(params->conn); params->conn = NULL; } } unlock: hci_update_background_scan(hdev); Loading Loading @@ -4304,8 +4309,16 @@ static void check_pending_le_conn(struct hci_dev *hdev, bdaddr_t *addr, conn = hci_connect_le(hdev, addr, addr_type, BT_SECURITY_LOW, HCI_LE_AUTOCONN_TIMEOUT, HCI_ROLE_MASTER); if (!IS_ERR(conn)) if (!IS_ERR(conn)) { /* Store the pointer since we don't really have any * other owner of the object besides the params that * triggered it. This way we can abort the connection if * the parameters get removed and keep the reference * count consistent once the connection is established. */ params->conn = conn; return; } switch (PTR_ERR(conn)) { case -EBUSY: Loading Loading
include/net/bluetooth/hci_core.h +2 −0 Original line number Diff line number Diff line Loading @@ -464,6 +464,8 @@ struct hci_conn_params { HCI_AUTO_CONN_ALWAYS, HCI_AUTO_CONN_LINK_LOSS, } auto_connect; struct hci_conn *conn; }; extern struct list_head hci_dev_list; Loading
include/net/netns/ieee802154_6lowpan.h +0 −1 Original line number Diff line number Diff line Loading @@ -16,7 +16,6 @@ struct netns_sysctl_lowpan { struct netns_ieee802154_lowpan { struct netns_sysctl_lowpan sysctl; struct netns_frags frags; int max_dsize; }; #endif
net/bluetooth/hci_conn.c +8 −0 Original line number Diff line number Diff line Loading @@ -589,6 +589,14 @@ EXPORT_SYMBOL(hci_get_route); void hci_le_conn_failed(struct hci_conn *conn, u8 status) { struct hci_dev *hdev = conn->hdev; struct hci_conn_params *params; params = hci_pend_le_action_lookup(&hdev->pend_le_conns, &conn->dst, conn->dst_type); if (params && params->conn) { hci_conn_drop(params->conn); params->conn = NULL; } conn->state = BT_CLOSED; Loading
net/bluetooth/hci_core.c +12 −2 Original line number Diff line number Diff line Loading @@ -2536,8 +2536,13 @@ static void hci_pend_le_actions_clear(struct hci_dev *hdev) { struct hci_conn_params *p; list_for_each_entry(p, &hdev->le_conn_params, list) list_for_each_entry(p, &hdev->le_conn_params, list) { if (p->conn) { hci_conn_drop(p->conn); p->conn = NULL; } list_del_init(&p->action); } BT_DBG("All LE pending actions cleared"); } Loading Loading @@ -2578,8 +2583,8 @@ static int hci_dev_do_close(struct hci_dev *hdev) hci_dev_lock(hdev); hci_inquiry_cache_flush(hdev); hci_conn_hash_flush(hdev); hci_pend_le_actions_clear(hdev); hci_conn_hash_flush(hdev); hci_dev_unlock(hdev); hci_notify(hdev, HCI_DEV_DOWN); Loading Loading @@ -3727,6 +3732,9 @@ void hci_conn_params_del(struct hci_dev *hdev, bdaddr_t *addr, u8 addr_type) if (!params) return; if (params->conn) hci_conn_drop(params->conn); list_del(¶ms->action); list_del(¶ms->list); kfree(params); Loading Loading @@ -3757,6 +3765,8 @@ void hci_conn_params_clear_all(struct hci_dev *hdev) struct hci_conn_params *params, *tmp; list_for_each_entry_safe(params, tmp, &hdev->le_conn_params, list) { if (params->conn) hci_conn_drop(params->conn); list_del(¶ms->action); list_del(¶ms->list); kfree(params); Loading
net/bluetooth/hci_event.c +15 −2 Original line number Diff line number Diff line Loading @@ -4221,8 +4221,13 @@ static void hci_le_conn_complete_evt(struct hci_dev *hdev, struct sk_buff *skb) hci_proto_connect_cfm(conn, ev->status); params = hci_conn_params_lookup(hdev, &conn->dst, conn->dst_type); if (params) if (params) { list_del_init(¶ms->action); if (params->conn) { hci_conn_drop(params->conn); params->conn = NULL; } } unlock: hci_update_background_scan(hdev); Loading Loading @@ -4304,8 +4309,16 @@ static void check_pending_le_conn(struct hci_dev *hdev, bdaddr_t *addr, conn = hci_connect_le(hdev, addr, addr_type, BT_SECURITY_LOW, HCI_LE_AUTOCONN_TIMEOUT, HCI_ROLE_MASTER); if (!IS_ERR(conn)) if (!IS_ERR(conn)) { /* Store the pointer since we don't really have any * other owner of the object besides the params that * triggered it. This way we can abort the connection if * the parameters get removed and keep the reference * count consistent once the connection is established. */ params->conn = conn; return; } switch (PTR_ERR(conn)) { case -EBUSY: Loading