diff options
author | David S. Miller <davem@davemloft.net> | 2019-02-24 22:27:19 -0800 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2019-02-24 22:27:19 -0800 |
commit | e8b47b53a172e74dd9907eb7810f02a1d09fb29b (patch) | |
tree | 17a5289187a67507f4ea6af37b282521dc735718 /net/bluetooth/af_bluetooth.c | |
parent | bd16693f359bbab8776541c06a6df32f3996638e (diff) | |
parent | e0b67035a90b58d01f911fed77b6e3da153da66e (diff) | |
download | linux-e8b47b53a172e74dd9907eb7810f02a1d09fb29b.tar.gz linux-e8b47b53a172e74dd9907eb7810f02a1d09fb29b.tar.bz2 linux-e8b47b53a172e74dd9907eb7810f02a1d09fb29b.zip |
Merge branch 'for-upstream' of git://git.kernel.org/pub/scm/linux/kernel/git/bluetooth/bluetooth-next
Johan Hedberg says:
====================
Here's the main bluetooth-next pull request for the 5.1 kernel.
- Fixes & improvements to mediatek, hci_qca, btrtl, and btmrvl HCI drivers
- Fixes to parsing invalid L2CAP config option sizes
- Locking fix to bt_accept_enqueue()
- Add support for new Marvel sd8977 chipset
- Various other smaller fixes & cleanups
====================
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'net/bluetooth/af_bluetooth.c')
-rw-r--r-- | net/bluetooth/af_bluetooth.c | 16 |
1 files changed, 13 insertions, 3 deletions
diff --git a/net/bluetooth/af_bluetooth.c b/net/bluetooth/af_bluetooth.c index deacc52d7ff1..8d12198eaa94 100644 --- a/net/bluetooth/af_bluetooth.c +++ b/net/bluetooth/af_bluetooth.c @@ -154,15 +154,25 @@ void bt_sock_unlink(struct bt_sock_list *l, struct sock *sk) } EXPORT_SYMBOL(bt_sock_unlink); -void bt_accept_enqueue(struct sock *parent, struct sock *sk) +void bt_accept_enqueue(struct sock *parent, struct sock *sk, bool bh) { BT_DBG("parent %p, sk %p", parent, sk); sock_hold(sk); - lock_sock_nested(sk, SINGLE_DEPTH_NESTING); + + if (bh) + bh_lock_sock_nested(sk); + else + lock_sock_nested(sk, SINGLE_DEPTH_NESTING); + list_add_tail(&bt_sk(sk)->accept_q, &bt_sk(parent)->accept_q); bt_sk(sk)->parent = parent; - release_sock(sk); + + if (bh) + bh_unlock_sock(sk); + else + release_sock(sk); + parent->sk_ack_backlog++; } EXPORT_SYMBOL(bt_accept_enqueue); |