]> git.openfabrics.org - ~emulex/infiniband.git/commitdiff
Bluetooth: Delay session allocation in hidp
authorGustavo F. Padovan <padovan@profusion.mobi>
Fri, 7 Oct 2011 02:32:29 +0000 (23:32 -0300)
committerGustavo F. Padovan <padovan@profusion.mobi>
Fri, 7 Oct 2011 04:43:17 +0000 (01:43 -0300)
It gets allocated only when it is really needed.

Signed-off-by: Gustavo F. Padovan <padovan@profusion.mobi>
net/bluetooth/hidp/core.c

index 304a73f96cc2b20b8c8f8c435e4d41efe049af4b..fbbf8029502091e9c6afeef0efa1784485f5f25b 100644 (file)
@@ -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);