|
@@ -522,31 +522,35 @@ static void l2cap_conn_start(struct l2cap_conn *conn)
|
|
}
|
|
}
|
|
|
|
|
|
if (sk->sk_state == BT_CONNECT) {
|
|
if (sk->sk_state == BT_CONNECT) {
|
|
- if (l2cap_check_security(sk) &&
|
|
|
|
- __l2cap_no_conn_pending(sk)) {
|
|
|
|
- struct l2cap_conn_req req;
|
|
|
|
|
|
+ struct l2cap_conn_req req;
|
|
|
|
|
|
- if (!l2cap_mode_supported(l2cap_pi(sk)->mode,
|
|
|
|
- conn->feat_mask)
|
|
|
|
- && l2cap_pi(sk)->conf_state &
|
|
|
|
- L2CAP_CONF_STATE2_DEVICE) {
|
|
|
|
- tmp1 = kzalloc(sizeof(struct sock_del_list),
|
|
|
|
- GFP_ATOMIC);
|
|
|
|
- tmp1->sk = sk;
|
|
|
|
- list_add_tail(&tmp1->list, &del.list);
|
|
|
|
- bh_unlock_sock(sk);
|
|
|
|
- continue;
|
|
|
|
- }
|
|
|
|
|
|
+ if (!l2cap_check_security(sk) ||
|
|
|
|
+ !__l2cap_no_conn_pending(sk)) {
|
|
|
|
+ bh_unlock_sock(sk);
|
|
|
|
+ continue;
|
|
|
|
+ }
|
|
|
|
|
|
- req.scid = cpu_to_le16(l2cap_pi(sk)->scid);
|
|
|
|
- req.psm = l2cap_pi(sk)->psm;
|
|
|
|
|
|
+ if (!l2cap_mode_supported(l2cap_pi(sk)->mode,
|
|
|
|
+ conn->feat_mask)
|
|
|
|
+ && l2cap_pi(sk)->conf_state &
|
|
|
|
+ L2CAP_CONF_STATE2_DEVICE) {
|
|
|
|
+ tmp1 = kzalloc(sizeof(struct sock_del_list),
|
|
|
|
+ GFP_ATOMIC);
|
|
|
|
+ tmp1->sk = sk;
|
|
|
|
+ list_add_tail(&tmp1->list, &del.list);
|
|
|
|
+ bh_unlock_sock(sk);
|
|
|
|
+ continue;
|
|
|
|
+ }
|
|
|
|
|
|
- l2cap_pi(sk)->ident = l2cap_get_ident(conn);
|
|
|
|
- l2cap_pi(sk)->conf_state |= L2CAP_CONF_CONNECT_PEND;
|
|
|
|
|
|
+ req.scid = cpu_to_le16(l2cap_pi(sk)->scid);
|
|
|
|
+ req.psm = l2cap_pi(sk)->psm;
|
|
|
|
+
|
|
|
|
+ l2cap_pi(sk)->ident = l2cap_get_ident(conn);
|
|
|
|
+ l2cap_pi(sk)->conf_state |= L2CAP_CONF_CONNECT_PEND;
|
|
|
|
+
|
|
|
|
+ l2cap_send_cmd(conn, l2cap_pi(sk)->ident,
|
|
|
|
+ L2CAP_CONN_REQ, sizeof(req), &req);
|
|
|
|
|
|
- l2cap_send_cmd(conn, l2cap_pi(sk)->ident,
|
|
|
|
- L2CAP_CONN_REQ, sizeof(req), &req);
|
|
|
|
- }
|
|
|
|
} else if (sk->sk_state == BT_CONNECT2) {
|
|
} else if (sk->sk_state == BT_CONNECT2) {
|
|
struct l2cap_conn_rsp rsp;
|
|
struct l2cap_conn_rsp rsp;
|
|
char buf[128];
|
|
char buf[128];
|