Bluetooth: Get rid of __l2cap_get_sock_by_psm()
l2cap_get_sock_by_psm() was the only user of this function, so I merged both into l2cap_get_sock_by_psm(). The socket lock now should be hold outside of l2cap_get_sock_by_psm() once we hold and release it inside the same function now. Signed-off-by: Gustavo F. Padovan <padovan@profusion.mobi>
This commit is contained in:
@@ -751,11 +751,13 @@ found:
|
|||||||
/* Find socket with psm and source bdaddr.
|
/* Find socket with psm and source bdaddr.
|
||||||
* Returns closest match.
|
* Returns closest match.
|
||||||
*/
|
*/
|
||||||
static struct sock *__l2cap_get_sock_by_psm(int state, __le16 psm, bdaddr_t *src)
|
static struct sock *l2cap_get_sock_by_psm(int state, __le16 psm, bdaddr_t *src)
|
||||||
{
|
{
|
||||||
struct sock *sk = NULL, *sk1 = NULL;
|
struct sock *sk = NULL, *sk1 = NULL;
|
||||||
struct hlist_node *node;
|
struct hlist_node *node;
|
||||||
|
|
||||||
|
read_lock(&l2cap_sk_list.lock);
|
||||||
|
|
||||||
sk_for_each(sk, node, &l2cap_sk_list.head) {
|
sk_for_each(sk, node, &l2cap_sk_list.head) {
|
||||||
if (state && sk->sk_state != state)
|
if (state && sk->sk_state != state)
|
||||||
continue;
|
continue;
|
||||||
@@ -770,20 +772,10 @@ static struct sock *__l2cap_get_sock_by_psm(int state, __le16 psm, bdaddr_t *src
|
|||||||
sk1 = sk;
|
sk1 = sk;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return node ? sk : sk1;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Find socket with given address (psm, src).
|
|
||||||
* Returns locked socket */
|
|
||||||
static inline struct sock *l2cap_get_sock_by_psm(int state, __le16 psm, bdaddr_t *src)
|
|
||||||
{
|
|
||||||
struct sock *s;
|
|
||||||
read_lock(&l2cap_sk_list.lock);
|
|
||||||
s = __l2cap_get_sock_by_psm(state, psm, src);
|
|
||||||
if (s)
|
|
||||||
bh_lock_sock(s);
|
|
||||||
read_unlock(&l2cap_sk_list.lock);
|
read_unlock(&l2cap_sk_list.lock);
|
||||||
return s;
|
|
||||||
|
return node ? sk : sk1;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void l2cap_sock_destruct(struct sock *sk)
|
static void l2cap_sock_destruct(struct sock *sk)
|
||||||
@@ -2934,6 +2926,8 @@ static inline int l2cap_connect_req(struct l2cap_conn *conn, struct l2cap_cmd_hd
|
|||||||
goto sendresp;
|
goto sendresp;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bh_lock_sock(parent);
|
||||||
|
|
||||||
/* Check if the ACL is secure enough (if not SDP) */
|
/* Check if the ACL is secure enough (if not SDP) */
|
||||||
if (psm != cpu_to_le16(0x0001) &&
|
if (psm != cpu_to_le16(0x0001) &&
|
||||||
!hci_conn_check_link_mode(conn->hcon)) {
|
!hci_conn_check_link_mode(conn->hcon)) {
|
||||||
@@ -4464,6 +4458,8 @@ static inline int l2cap_conless_channel(struct l2cap_conn *conn, __le16 psm, str
|
|||||||
if (!sk)
|
if (!sk)
|
||||||
goto drop;
|
goto drop;
|
||||||
|
|
||||||
|
bh_lock_sock(sk);
|
||||||
|
|
||||||
BT_DBG("sk %p, len %d", sk, skb->len);
|
BT_DBG("sk %p, len %d", sk, skb->len);
|
||||||
|
|
||||||
if (sk->sk_state != BT_BOUND && sk->sk_state != BT_CONNECTED)
|
if (sk->sk_state != BT_BOUND && sk->sk_state != BT_CONNECTED)
|
||||||
|
Reference in New Issue
Block a user