Thread (4 messages) 4 messages, 2 authors, 2012-01-23

Re: [PATCH] Bluetooth: Use non locking get_chan and explicit lock

From: Marcel Holtmann <marcel@holtmann.org>
Date: 2012-01-21 16:41:34

Hi Andrei,
quoted hunk ↗ jump to hunk
For receiving ACL packets use __l2cap_get_chan_by_scid which is not
locking sk and explicitly lock sk after checking that it is exist.
Code looks nicer since now it is surrounded by lock/release.

Signed-off-by: Andrei Emeltchenko <redacted>
---
 net/bluetooth/l2cap_core.c |    7 +++++--
 1 files changed, 5 insertions(+), 2 deletions(-)
diff --git a/net/bluetooth/l2cap_core.c b/net/bluetooth/l2cap_core.c
index d16ad49..53dbfd3 100644
--- a/net/bluetooth/l2cap_core.c
+++ b/net/bluetooth/l2cap_core.c
@@ -4243,7 +4243,7 @@ static inline int l2cap_data_channel(struct l2cap_conn *conn, u16 cid, struct sk
 	u16 tx_seq;
 	int len;
 
-	chan = l2cap_get_chan_by_scid(conn, cid);
+	chan = __l2cap_get_chan_by_scid(conn, cid);
 	if (!chan) {
 		if (cid == L2CAP_CID_A2MP) {
 			chan = a2mp_channel_create(conn, skb);
@@ -4255,6 +4255,8 @@ static inline int l2cap_data_channel(struct l2cap_conn *conn, u16 cid, struct sk
 	}
 
 	sk = chan->sk;
+	if (sk)
+		lock_sock(sk);
this is the part I clearly do not like. This is pretty nasty conditional
locking. We need to figure out something better.

Regards

Marcel

Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help