Loading include/net/bluetooth/l2cap.h +2 −0 Original line number Original line Diff line number Diff line Loading @@ -439,6 +439,8 @@ struct l2cap_pinfo { #define L2CAP_CONN_RNR_SENT 0x0200 #define L2CAP_CONN_RNR_SENT 0x0200 #define L2CAP_CONN_SAR_RETRY 0x0400 #define L2CAP_CONN_SAR_RETRY 0x0400 #define __set_chan_timer(c, t) l2cap_set_timer(c, &c->chan_timer, (t)) #define __clear_chan_timer(c) l2cap_clear_timer(c, &c->chan_timer) #define __mod_retrans_timer() mod_timer(&chan->retrans_timer, \ #define __mod_retrans_timer() mod_timer(&chan->retrans_timer, \ jiffies + msecs_to_jiffies(L2CAP_DEFAULT_RETRANS_TO)); jiffies + msecs_to_jiffies(L2CAP_DEFAULT_RETRANS_TO)); #define __mod_monitor_timer() mod_timer(&chan->monitor_timer, \ #define __mod_monitor_timer() mod_timer(&chan->monitor_timer, \ Loading net/bluetooth/l2cap_core.c +29 −29 Original line number Original line Diff line number Diff line Loading @@ -220,19 +220,19 @@ static u16 l2cap_alloc_cid(struct l2cap_conn *conn) return 0; return 0; } } static void l2cap_chan_set_timer(struct l2cap_chan *chan, long timeout) static void l2cap_set_timer(struct l2cap_chan *chan, struct timer_list *timer, long timeout) { { BT_DBG("chan %p state %d timeout %ld", chan->sk, chan->state, timeout); BT_DBG("chan %p state %d timeout %ld", chan->sk, chan->state, timeout); if (!mod_timer(&chan->chan_timer, jiffies + timeout)) if (!mod_timer(timer, jiffies + timeout)) chan_hold(chan); chan_hold(chan); } } static void l2cap_chan_clear_timer(struct l2cap_chan *chan) static void l2cap_clear_timer(struct l2cap_chan *chan, struct timer_list *timer) { { BT_DBG("chan %p state %d", chan, chan->state); BT_DBG("chan %p state %d", chan, chan->state); if (timer_pending(&chan->chan_timer) && del_timer(&chan->chan_timer)) if (timer_pending(timer) && del_timer(timer)) chan_put(chan); chan_put(chan); } } Loading @@ -254,7 +254,7 @@ static void l2cap_chan_timeout(unsigned long arg) if (sock_owned_by_user(sk)) { if (sock_owned_by_user(sk)) { /* sk is owned by user. Try again later */ /* sk is owned by user. Try again later */ l2cap_chan_set_timer(chan, HZ / 5); __set_chan_timer(chan, HZ / 5); bh_unlock_sock(sk); bh_unlock_sock(sk); chan_put(chan); chan_put(chan); return; return; Loading Loading @@ -353,7 +353,7 @@ static void l2cap_chan_del(struct l2cap_chan *chan, int err) struct l2cap_conn *conn = chan->conn; struct l2cap_conn *conn = chan->conn; struct sock *parent = bt_sk(sk)->parent; struct sock *parent = bt_sk(sk)->parent; l2cap_chan_clear_timer(chan); __clear_chan_timer(chan); BT_DBG("chan %p, conn %p, err %d", chan, conn, err); BT_DBG("chan %p, conn %p, err %d", chan, conn, err); Loading Loading @@ -412,7 +412,7 @@ static void l2cap_chan_cleanup_listen(struct sock *parent) /* Close not yet accepted channels */ /* Close not yet accepted channels */ while ((sk = bt_accept_dequeue(parent, NULL))) { while ((sk = bt_accept_dequeue(parent, NULL))) { struct l2cap_chan *chan = l2cap_pi(sk)->chan; struct l2cap_chan *chan = l2cap_pi(sk)->chan; l2cap_chan_clear_timer(chan); __clear_chan_timer(chan); lock_sock(sk); lock_sock(sk); l2cap_chan_close(chan, ECONNRESET); l2cap_chan_close(chan, ECONNRESET); release_sock(sk); release_sock(sk); Loading @@ -439,8 +439,8 @@ void l2cap_chan_close(struct l2cap_chan *chan, int reason) case BT_CONFIG: case BT_CONFIG: if (chan->chan_type == L2CAP_CHAN_CONN_ORIENTED && if (chan->chan_type == L2CAP_CHAN_CONN_ORIENTED && conn->hcon->type == ACL_LINK) { conn->hcon->type == ACL_LINK) { l2cap_chan_clear_timer(chan); __clear_chan_timer(chan); l2cap_chan_set_timer(chan, sk->sk_sndtimeo); __set_chan_timer(chan, sk->sk_sndtimeo); l2cap_send_disconn_req(conn, chan, reason); l2cap_send_disconn_req(conn, chan, reason); } else } else l2cap_chan_del(chan, reason); l2cap_chan_del(chan, reason); Loading Loading @@ -878,7 +878,7 @@ static void l2cap_le_conn_ready(struct l2cap_conn *conn) __l2cap_chan_add(conn, chan); __l2cap_chan_add(conn, chan); l2cap_chan_set_timer(chan, sk->sk_sndtimeo); __set_chan_timer(chan, sk->sk_sndtimeo); l2cap_state_change(chan, BT_CONNECTED); l2cap_state_change(chan, BT_CONNECTED); parent->sk_data_ready(parent, 0); parent->sk_data_ready(parent, 0); Loading Loading @@ -906,13 +906,13 @@ static void l2cap_conn_ready(struct l2cap_conn *conn) bh_lock_sock(sk); bh_lock_sock(sk); if (conn->hcon->type == LE_LINK) { if (conn->hcon->type == LE_LINK) { l2cap_chan_clear_timer(chan); __clear_chan_timer(chan); l2cap_state_change(chan, BT_CONNECTED); l2cap_state_change(chan, BT_CONNECTED); sk->sk_state_change(sk); sk->sk_state_change(sk); } } if (chan->chan_type != L2CAP_CHAN_CONN_ORIENTED) { if (chan->chan_type != L2CAP_CHAN_CONN_ORIENTED) { l2cap_chan_clear_timer(chan); __clear_chan_timer(chan); l2cap_state_change(chan, BT_CONNECTED); l2cap_state_change(chan, BT_CONNECTED); sk->sk_state_change(sk); sk->sk_state_change(sk); } else if (chan->state == BT_CONNECT) } else if (chan->state == BT_CONNECT) Loading Loading @@ -1111,11 +1111,11 @@ int l2cap_chan_connect(struct l2cap_chan *chan) l2cap_chan_add(conn, chan); l2cap_chan_add(conn, chan); l2cap_state_change(chan, BT_CONNECT); l2cap_state_change(chan, BT_CONNECT); l2cap_chan_set_timer(chan, sk->sk_sndtimeo); __set_chan_timer(chan, sk->sk_sndtimeo); if (hcon->state == BT_CONNECTED) { if (hcon->state == BT_CONNECTED) { if (chan->chan_type != L2CAP_CHAN_CONN_ORIENTED) { if (chan->chan_type != L2CAP_CHAN_CONN_ORIENTED) { l2cap_chan_clear_timer(chan); __clear_chan_timer(chan); if (l2cap_check_security(chan)) if (l2cap_check_security(chan)) l2cap_state_change(chan, BT_CONNECTED); l2cap_state_change(chan, BT_CONNECTED); } else } else Loading Loading @@ -1679,7 +1679,7 @@ static void l2cap_chan_ready(struct sock *sk) BT_DBG("sk %p, parent %p", sk, parent); BT_DBG("sk %p, parent %p", sk, parent); chan->conf_state = 0; chan->conf_state = 0; l2cap_chan_clear_timer(chan); __clear_chan_timer(chan); if (!parent) { if (!parent) { /* Outgoing channel. /* Outgoing channel. Loading Loading @@ -2374,7 +2374,7 @@ static inline int l2cap_connect_req(struct l2cap_conn *conn, struct l2cap_cmd_hd dcid = chan->scid; dcid = chan->scid; l2cap_chan_set_timer(chan, sk->sk_sndtimeo); __set_chan_timer(chan, sk->sk_sndtimeo); chan->ident = cmd->ident; chan->ident = cmd->ident; Loading Loading @@ -2491,8 +2491,8 @@ static inline int l2cap_connect_rsp(struct l2cap_conn *conn, struct l2cap_cmd_hd /* don't delete l2cap channel if sk is owned by user */ /* don't delete l2cap channel if sk is owned by user */ if (sock_owned_by_user(sk)) { if (sock_owned_by_user(sk)) { l2cap_state_change(chan, BT_DISCONN); l2cap_state_change(chan, BT_DISCONN); l2cap_chan_clear_timer(chan); __clear_chan_timer(chan); l2cap_chan_set_timer(chan, HZ / 5); __set_chan_timer(chan, HZ / 5); break; break; } } Loading Loading @@ -2665,7 +2665,7 @@ static inline int l2cap_config_rsp(struct l2cap_conn *conn, struct l2cap_cmd_hdr default: default: sk->sk_err = ECONNRESET; sk->sk_err = ECONNRESET; l2cap_chan_set_timer(chan, HZ * 5); __set_chan_timer(chan, HZ * 5); l2cap_send_disconn_req(conn, chan, ECONNRESET); l2cap_send_disconn_req(conn, chan, ECONNRESET); goto done; goto done; } } Loading Loading @@ -2721,8 +2721,8 @@ static inline int l2cap_disconnect_req(struct l2cap_conn *conn, struct l2cap_cmd /* don't delete l2cap channel if sk is owned by user */ /* don't delete l2cap channel if sk is owned by user */ if (sock_owned_by_user(sk)) { if (sock_owned_by_user(sk)) { l2cap_state_change(chan, BT_DISCONN); l2cap_state_change(chan, BT_DISCONN); l2cap_chan_clear_timer(chan); __clear_chan_timer(chan); l2cap_chan_set_timer(chan, HZ / 5); __set_chan_timer(chan, HZ / 5); bh_unlock_sock(sk); bh_unlock_sock(sk); return 0; return 0; } } Loading Loading @@ -2755,8 +2755,8 @@ static inline int l2cap_disconnect_rsp(struct l2cap_conn *conn, struct l2cap_cmd /* don't delete l2cap channel if sk is owned by user */ /* don't delete l2cap channel if sk is owned by user */ if (sock_owned_by_user(sk)) { if (sock_owned_by_user(sk)) { l2cap_state_change(chan,BT_DISCONN); l2cap_state_change(chan,BT_DISCONN); l2cap_chan_clear_timer(chan); __clear_chan_timer(chan); l2cap_chan_set_timer(chan, HZ / 5); __set_chan_timer(chan, HZ / 5); bh_unlock_sock(sk); bh_unlock_sock(sk); return 0; return 0; } } Loading Loading @@ -4152,13 +4152,13 @@ static inline void l2cap_check_encryption(struct l2cap_chan *chan, u8 encrypt) if (encrypt == 0x00) { if (encrypt == 0x00) { if (chan->sec_level == BT_SECURITY_MEDIUM) { if (chan->sec_level == BT_SECURITY_MEDIUM) { l2cap_chan_clear_timer(chan); __clear_chan_timer(chan); l2cap_chan_set_timer(chan, HZ * 5); __set_chan_timer(chan, HZ * 5); } else if (chan->sec_level == BT_SECURITY_HIGH) } else if (chan->sec_level == BT_SECURITY_HIGH) l2cap_chan_close(chan, ECONNREFUSED); l2cap_chan_close(chan, ECONNREFUSED); } else { } else { if (chan->sec_level == BT_SECURITY_MEDIUM) if (chan->sec_level == BT_SECURITY_MEDIUM) l2cap_chan_clear_timer(chan); __clear_chan_timer(chan); } } } } Loading Loading @@ -4203,8 +4203,8 @@ static int l2cap_security_cfm(struct hci_conn *hcon, u8 status, u8 encrypt) l2cap_send_cmd(conn, chan->ident, l2cap_send_cmd(conn, chan->ident, L2CAP_CONN_REQ, sizeof(req), &req); L2CAP_CONN_REQ, sizeof(req), &req); } else { } else { l2cap_chan_clear_timer(chan); __clear_chan_timer(chan); l2cap_chan_set_timer(chan, HZ / 10); __set_chan_timer(chan, HZ / 10); } } } else if (chan->state == BT_CONNECT2) { } else if (chan->state == BT_CONNECT2) { struct l2cap_conn_rsp rsp; struct l2cap_conn_rsp rsp; Loading @@ -4215,7 +4215,7 @@ static int l2cap_security_cfm(struct hci_conn *hcon, u8 status, u8 encrypt) result = L2CAP_CR_SUCCESS; result = L2CAP_CR_SUCCESS; } else { } else { l2cap_state_change(chan, BT_DISCONN); l2cap_state_change(chan, BT_DISCONN); l2cap_chan_set_timer(chan, HZ / 10); __set_chan_timer(chan, HZ / 10); result = L2CAP_CR_SEC_BLOCK; result = L2CAP_CR_SEC_BLOCK; } } Loading Loading
include/net/bluetooth/l2cap.h +2 −0 Original line number Original line Diff line number Diff line Loading @@ -439,6 +439,8 @@ struct l2cap_pinfo { #define L2CAP_CONN_RNR_SENT 0x0200 #define L2CAP_CONN_RNR_SENT 0x0200 #define L2CAP_CONN_SAR_RETRY 0x0400 #define L2CAP_CONN_SAR_RETRY 0x0400 #define __set_chan_timer(c, t) l2cap_set_timer(c, &c->chan_timer, (t)) #define __clear_chan_timer(c) l2cap_clear_timer(c, &c->chan_timer) #define __mod_retrans_timer() mod_timer(&chan->retrans_timer, \ #define __mod_retrans_timer() mod_timer(&chan->retrans_timer, \ jiffies + msecs_to_jiffies(L2CAP_DEFAULT_RETRANS_TO)); jiffies + msecs_to_jiffies(L2CAP_DEFAULT_RETRANS_TO)); #define __mod_monitor_timer() mod_timer(&chan->monitor_timer, \ #define __mod_monitor_timer() mod_timer(&chan->monitor_timer, \ Loading
net/bluetooth/l2cap_core.c +29 −29 Original line number Original line Diff line number Diff line Loading @@ -220,19 +220,19 @@ static u16 l2cap_alloc_cid(struct l2cap_conn *conn) return 0; return 0; } } static void l2cap_chan_set_timer(struct l2cap_chan *chan, long timeout) static void l2cap_set_timer(struct l2cap_chan *chan, struct timer_list *timer, long timeout) { { BT_DBG("chan %p state %d timeout %ld", chan->sk, chan->state, timeout); BT_DBG("chan %p state %d timeout %ld", chan->sk, chan->state, timeout); if (!mod_timer(&chan->chan_timer, jiffies + timeout)) if (!mod_timer(timer, jiffies + timeout)) chan_hold(chan); chan_hold(chan); } } static void l2cap_chan_clear_timer(struct l2cap_chan *chan) static void l2cap_clear_timer(struct l2cap_chan *chan, struct timer_list *timer) { { BT_DBG("chan %p state %d", chan, chan->state); BT_DBG("chan %p state %d", chan, chan->state); if (timer_pending(&chan->chan_timer) && del_timer(&chan->chan_timer)) if (timer_pending(timer) && del_timer(timer)) chan_put(chan); chan_put(chan); } } Loading @@ -254,7 +254,7 @@ static void l2cap_chan_timeout(unsigned long arg) if (sock_owned_by_user(sk)) { if (sock_owned_by_user(sk)) { /* sk is owned by user. Try again later */ /* sk is owned by user. Try again later */ l2cap_chan_set_timer(chan, HZ / 5); __set_chan_timer(chan, HZ / 5); bh_unlock_sock(sk); bh_unlock_sock(sk); chan_put(chan); chan_put(chan); return; return; Loading Loading @@ -353,7 +353,7 @@ static void l2cap_chan_del(struct l2cap_chan *chan, int err) struct l2cap_conn *conn = chan->conn; struct l2cap_conn *conn = chan->conn; struct sock *parent = bt_sk(sk)->parent; struct sock *parent = bt_sk(sk)->parent; l2cap_chan_clear_timer(chan); __clear_chan_timer(chan); BT_DBG("chan %p, conn %p, err %d", chan, conn, err); BT_DBG("chan %p, conn %p, err %d", chan, conn, err); Loading Loading @@ -412,7 +412,7 @@ static void l2cap_chan_cleanup_listen(struct sock *parent) /* Close not yet accepted channels */ /* Close not yet accepted channels */ while ((sk = bt_accept_dequeue(parent, NULL))) { while ((sk = bt_accept_dequeue(parent, NULL))) { struct l2cap_chan *chan = l2cap_pi(sk)->chan; struct l2cap_chan *chan = l2cap_pi(sk)->chan; l2cap_chan_clear_timer(chan); __clear_chan_timer(chan); lock_sock(sk); lock_sock(sk); l2cap_chan_close(chan, ECONNRESET); l2cap_chan_close(chan, ECONNRESET); release_sock(sk); release_sock(sk); Loading @@ -439,8 +439,8 @@ void l2cap_chan_close(struct l2cap_chan *chan, int reason) case BT_CONFIG: case BT_CONFIG: if (chan->chan_type == L2CAP_CHAN_CONN_ORIENTED && if (chan->chan_type == L2CAP_CHAN_CONN_ORIENTED && conn->hcon->type == ACL_LINK) { conn->hcon->type == ACL_LINK) { l2cap_chan_clear_timer(chan); __clear_chan_timer(chan); l2cap_chan_set_timer(chan, sk->sk_sndtimeo); __set_chan_timer(chan, sk->sk_sndtimeo); l2cap_send_disconn_req(conn, chan, reason); l2cap_send_disconn_req(conn, chan, reason); } else } else l2cap_chan_del(chan, reason); l2cap_chan_del(chan, reason); Loading Loading @@ -878,7 +878,7 @@ static void l2cap_le_conn_ready(struct l2cap_conn *conn) __l2cap_chan_add(conn, chan); __l2cap_chan_add(conn, chan); l2cap_chan_set_timer(chan, sk->sk_sndtimeo); __set_chan_timer(chan, sk->sk_sndtimeo); l2cap_state_change(chan, BT_CONNECTED); l2cap_state_change(chan, BT_CONNECTED); parent->sk_data_ready(parent, 0); parent->sk_data_ready(parent, 0); Loading Loading @@ -906,13 +906,13 @@ static void l2cap_conn_ready(struct l2cap_conn *conn) bh_lock_sock(sk); bh_lock_sock(sk); if (conn->hcon->type == LE_LINK) { if (conn->hcon->type == LE_LINK) { l2cap_chan_clear_timer(chan); __clear_chan_timer(chan); l2cap_state_change(chan, BT_CONNECTED); l2cap_state_change(chan, BT_CONNECTED); sk->sk_state_change(sk); sk->sk_state_change(sk); } } if (chan->chan_type != L2CAP_CHAN_CONN_ORIENTED) { if (chan->chan_type != L2CAP_CHAN_CONN_ORIENTED) { l2cap_chan_clear_timer(chan); __clear_chan_timer(chan); l2cap_state_change(chan, BT_CONNECTED); l2cap_state_change(chan, BT_CONNECTED); sk->sk_state_change(sk); sk->sk_state_change(sk); } else if (chan->state == BT_CONNECT) } else if (chan->state == BT_CONNECT) Loading Loading @@ -1111,11 +1111,11 @@ int l2cap_chan_connect(struct l2cap_chan *chan) l2cap_chan_add(conn, chan); l2cap_chan_add(conn, chan); l2cap_state_change(chan, BT_CONNECT); l2cap_state_change(chan, BT_CONNECT); l2cap_chan_set_timer(chan, sk->sk_sndtimeo); __set_chan_timer(chan, sk->sk_sndtimeo); if (hcon->state == BT_CONNECTED) { if (hcon->state == BT_CONNECTED) { if (chan->chan_type != L2CAP_CHAN_CONN_ORIENTED) { if (chan->chan_type != L2CAP_CHAN_CONN_ORIENTED) { l2cap_chan_clear_timer(chan); __clear_chan_timer(chan); if (l2cap_check_security(chan)) if (l2cap_check_security(chan)) l2cap_state_change(chan, BT_CONNECTED); l2cap_state_change(chan, BT_CONNECTED); } else } else Loading Loading @@ -1679,7 +1679,7 @@ static void l2cap_chan_ready(struct sock *sk) BT_DBG("sk %p, parent %p", sk, parent); BT_DBG("sk %p, parent %p", sk, parent); chan->conf_state = 0; chan->conf_state = 0; l2cap_chan_clear_timer(chan); __clear_chan_timer(chan); if (!parent) { if (!parent) { /* Outgoing channel. /* Outgoing channel. Loading Loading @@ -2374,7 +2374,7 @@ static inline int l2cap_connect_req(struct l2cap_conn *conn, struct l2cap_cmd_hd dcid = chan->scid; dcid = chan->scid; l2cap_chan_set_timer(chan, sk->sk_sndtimeo); __set_chan_timer(chan, sk->sk_sndtimeo); chan->ident = cmd->ident; chan->ident = cmd->ident; Loading Loading @@ -2491,8 +2491,8 @@ static inline int l2cap_connect_rsp(struct l2cap_conn *conn, struct l2cap_cmd_hd /* don't delete l2cap channel if sk is owned by user */ /* don't delete l2cap channel if sk is owned by user */ if (sock_owned_by_user(sk)) { if (sock_owned_by_user(sk)) { l2cap_state_change(chan, BT_DISCONN); l2cap_state_change(chan, BT_DISCONN); l2cap_chan_clear_timer(chan); __clear_chan_timer(chan); l2cap_chan_set_timer(chan, HZ / 5); __set_chan_timer(chan, HZ / 5); break; break; } } Loading Loading @@ -2665,7 +2665,7 @@ static inline int l2cap_config_rsp(struct l2cap_conn *conn, struct l2cap_cmd_hdr default: default: sk->sk_err = ECONNRESET; sk->sk_err = ECONNRESET; l2cap_chan_set_timer(chan, HZ * 5); __set_chan_timer(chan, HZ * 5); l2cap_send_disconn_req(conn, chan, ECONNRESET); l2cap_send_disconn_req(conn, chan, ECONNRESET); goto done; goto done; } } Loading Loading @@ -2721,8 +2721,8 @@ static inline int l2cap_disconnect_req(struct l2cap_conn *conn, struct l2cap_cmd /* don't delete l2cap channel if sk is owned by user */ /* don't delete l2cap channel if sk is owned by user */ if (sock_owned_by_user(sk)) { if (sock_owned_by_user(sk)) { l2cap_state_change(chan, BT_DISCONN); l2cap_state_change(chan, BT_DISCONN); l2cap_chan_clear_timer(chan); __clear_chan_timer(chan); l2cap_chan_set_timer(chan, HZ / 5); __set_chan_timer(chan, HZ / 5); bh_unlock_sock(sk); bh_unlock_sock(sk); return 0; return 0; } } Loading Loading @@ -2755,8 +2755,8 @@ static inline int l2cap_disconnect_rsp(struct l2cap_conn *conn, struct l2cap_cmd /* don't delete l2cap channel if sk is owned by user */ /* don't delete l2cap channel if sk is owned by user */ if (sock_owned_by_user(sk)) { if (sock_owned_by_user(sk)) { l2cap_state_change(chan,BT_DISCONN); l2cap_state_change(chan,BT_DISCONN); l2cap_chan_clear_timer(chan); __clear_chan_timer(chan); l2cap_chan_set_timer(chan, HZ / 5); __set_chan_timer(chan, HZ / 5); bh_unlock_sock(sk); bh_unlock_sock(sk); return 0; return 0; } } Loading Loading @@ -4152,13 +4152,13 @@ static inline void l2cap_check_encryption(struct l2cap_chan *chan, u8 encrypt) if (encrypt == 0x00) { if (encrypt == 0x00) { if (chan->sec_level == BT_SECURITY_MEDIUM) { if (chan->sec_level == BT_SECURITY_MEDIUM) { l2cap_chan_clear_timer(chan); __clear_chan_timer(chan); l2cap_chan_set_timer(chan, HZ * 5); __set_chan_timer(chan, HZ * 5); } else if (chan->sec_level == BT_SECURITY_HIGH) } else if (chan->sec_level == BT_SECURITY_HIGH) l2cap_chan_close(chan, ECONNREFUSED); l2cap_chan_close(chan, ECONNREFUSED); } else { } else { if (chan->sec_level == BT_SECURITY_MEDIUM) if (chan->sec_level == BT_SECURITY_MEDIUM) l2cap_chan_clear_timer(chan); __clear_chan_timer(chan); } } } } Loading Loading @@ -4203,8 +4203,8 @@ static int l2cap_security_cfm(struct hci_conn *hcon, u8 status, u8 encrypt) l2cap_send_cmd(conn, chan->ident, l2cap_send_cmd(conn, chan->ident, L2CAP_CONN_REQ, sizeof(req), &req); L2CAP_CONN_REQ, sizeof(req), &req); } else { } else { l2cap_chan_clear_timer(chan); __clear_chan_timer(chan); l2cap_chan_set_timer(chan, HZ / 10); __set_chan_timer(chan, HZ / 10); } } } else if (chan->state == BT_CONNECT2) { } else if (chan->state == BT_CONNECT2) { struct l2cap_conn_rsp rsp; struct l2cap_conn_rsp rsp; Loading @@ -4215,7 +4215,7 @@ static int l2cap_security_cfm(struct hci_conn *hcon, u8 status, u8 encrypt) result = L2CAP_CR_SUCCESS; result = L2CAP_CR_SUCCESS; } else { } else { l2cap_state_change(chan, BT_DISCONN); l2cap_state_change(chan, BT_DISCONN); l2cap_chan_set_timer(chan, HZ / 10); __set_chan_timer(chan, HZ / 10); result = L2CAP_CR_SEC_BLOCK; result = L2CAP_CR_SEC_BLOCK; } } Loading