diff options
author | Gustavo F. Padovan <padovan@profusion.mobi> | 2011-10-06 23:32:29 -0300 |
---|---|---|
committer | Gustavo F. Padovan <padovan@profusion.mobi> | 2011-10-07 01:43:17 -0300 |
commit | 81b25cd04387fbceb76fe893db4863a380941413 (patch) | |
tree | daa5a45323d8cd1cf5ce02935c9fd73daa782899 /net/bluetooth/hidp | |
parent | 1785dbf9e30be62ab45e34900e574b8307bc98b5 (diff) | |
download | lwn-81b25cd04387fbceb76fe893db4863a380941413.tar.gz lwn-81b25cd04387fbceb76fe893db4863a380941413.zip |
Bluetooth: Delay session allocation in hidp
It gets allocated only when it is really needed.
Signed-off-by: Gustavo F. Padovan <padovan@profusion.mobi>
Diffstat (limited to 'net/bluetooth/hidp')
-rw-r--r-- | net/bluetooth/hidp/core.c | 14 |
1 files changed, 8 insertions, 6 deletions
diff --git a/net/bluetooth/hidp/core.c b/net/bluetooth/hidp/core.c index 304a73f96cc2..fbbf80295020 100644 --- a/net/bluetooth/hidp/core.c +++ b/net/bluetooth/hidp/core.c @@ -979,18 +979,20 @@ int hidp_add_connection(struct hidp_connadd_req *req, struct socket *ctrl_sock, bacmp(&bt_sk(ctrl_sock->sk)->dst, &bt_sk(intr_sock->sk)->dst)) return -ENOTUNIQ; - session = kzalloc(sizeof(struct hidp_session), GFP_KERNEL); - if (!session) - return -ENOMEM; - BT_DBG("rd_data %p rd_size %d", req->rd_data, req->rd_size); down_write(&hidp_session_sem); s = __hidp_get_session(&bt_sk(ctrl_sock->sk)->dst); if (s && s->state == BT_CONNECTED) { - err = -EEXIST; - goto failed; + up_write(&hidp_session_sem); + return -EEXIST; + } + + session = kzalloc(sizeof(struct hidp_session), GFP_KERNEL); + if (!session) { + up_write(&hidp_session_sem); + return -ENOMEM; } session->conn = hidp_find_connection(session); |