]> Pileus Git - ~andy/linux/blobdiff - net/bluetooth/l2cap.c
Merge branch 'for_linus' of git://git.kernel.org/pub/scm/linux/kernel/git/jack/linux...
[~andy/linux] / net / bluetooth / l2cap.c
index a8811c0a0ceaf436f74002397041765e5757f7a3..6e180d255505b5ed223dd39cae92cb4d1f287b40 100644 (file)
@@ -62,7 +62,7 @@ static u32 l2cap_feat_mask = 0x0000;
 static const struct proto_ops l2cap_sock_ops;
 
 static struct bt_sock_list l2cap_sk_list = {
-       .lock = RW_LOCK_UNLOCKED
+       .lock = __RW_LOCK_UNLOCKED(l2cap_sk_list.lock)
 };
 
 static void __l2cap_sock_close(struct sock *sk, int reason);
@@ -417,6 +417,9 @@ static void l2cap_conn_del(struct hci_conn *hcon, int err)
                l2cap_sock_kill(sk);
        }
 
+       if (conn->info_state & L2CAP_INFO_FEAT_MASK_REQ_SENT)
+               del_timer_sync(&conn->info_timer);
+
        hcon->l2cap_data = NULL;
        kfree(conn);
 }
@@ -1496,7 +1499,7 @@ static inline int l2cap_connect_req(struct l2cap_conn *conn, struct l2cap_cmd_hd
                goto response;
        }
 
-       sk = l2cap_sock_alloc(parent->sk_net, NULL, BTPROTO_L2CAP, GFP_ATOMIC);
+       sk = l2cap_sock_alloc(sock_net(parent), NULL, BTPROTO_L2CAP, GFP_ATOMIC);
        if (!sk)
                goto response;
 
@@ -1824,7 +1827,7 @@ static inline int l2cap_information_rsp(struct l2cap_conn *conn, struct l2cap_cm
        del_timer(&conn->info_timer);
 
        if (type == L2CAP_IT_FEAT_MASK)
-               conn->feat_mask = __le32_to_cpu(get_unaligned((__le32 *) rsp->data));
+               conn->feat_mask = get_unaligned_le32(rsp->data);
 
        l2cap_conn_start(conn);