aboutsummaryrefslogtreecommitdiffstats
path: root/net
diff options
context:
space:
mode:
authorGustavo Padovan <gustavo.padovan@collabora.co.uk>2012-05-27 21:27:58 -0400
committerJohan Hedberg <johan.hedberg@intel.com>2012-06-04 23:34:11 -0400
commit2dfa1003ccd19b435de0be00f6afb7ccdffd7596 (patch)
tree3d09f8d4f15569d4be0a5ef607fe70742a378953 /net
parent538266929eb7165f92b91eb0f403120fe759e742 (diff)
Bluetooth: check for already existent channel before create new one
Move this check to before the channel time creation simplifies the code and avoid memory allocation if the channel already exist. Signed-off-by: Gustavo Padovan <gustavo.padovan@collabora.co.uk> Acked-by: Andrei Emeltchenko <andrei.emeltchenko@intel.com> Signed-off-by: Marcel Holtmann <marcel@holtmann.org>
Diffstat (limited to 'net')
-rw-r--r--net/bluetooth/l2cap_core.c13
1 files changed, 4 insertions, 9 deletions
diff --git a/net/bluetooth/l2cap_core.c b/net/bluetooth/l2cap_core.c
index d64c836f2bcf..6f30d1da89a0 100644
--- a/net/bluetooth/l2cap_core.c
+++ b/net/bluetooth/l2cap_core.c
@@ -3343,21 +3343,16 @@ static inline int l2cap_connect_req(struct l2cap_conn *conn, struct l2cap_cmd_hd
3343 3343
3344 result = L2CAP_CR_NO_MEM; 3344 result = L2CAP_CR_NO_MEM;
3345 3345
3346 /* Check if we already have channel with that dcid */
3347 if (__l2cap_get_chan_by_dcid(conn, scid))
3348 goto response;
3349
3346 chan = pchan->ops->new_connection(pchan); 3350 chan = pchan->ops->new_connection(pchan);
3347 if (!chan) 3351 if (!chan)
3348 goto response; 3352 goto response;
3349 3353
3350 sk = chan->sk; 3354 sk = chan->sk;
3351 3355
3352 /* Check if we already have channel with that dcid */
3353 if (__l2cap_get_chan_by_dcid(conn, scid)) {
3354 if (chan->ops->teardown)
3355 chan->ops->teardown(chan, 0);
3356
3357 chan->ops->close(chan);
3358 goto response;
3359 }
3360
3361 hci_conn_hold(conn->hcon); 3356 hci_conn_hold(conn->hcon);
3362 3357
3363 bacpy(&bt_sk(sk)->src, conn->src); 3358 bacpy(&bt_sk(sk)->src, conn->src);