Showing error 988

User: Jiri Slaby
Error type: Leaving function in locked state
Error type description: Some lock is not unlocked on all paths of a function, so it is leaked
File location: drivers/infiniband/core/cma.c
Line in file: 1101
Project: Linux Kernel
Project version: 2.6.28
Tools: Stanse (1.2)
Entered: 2012-03-02 21:35:18 UTC


Source:

1071        id_priv->state = CMA_CONNECT;
1072        return id_priv;
1073err:
1074        rdma_destroy_id(id);
1075        return NULL;
1076}
1077
1078static void cma_set_req_event_data(struct rdma_cm_event *event,
1079                                   struct ib_cm_req_event_param *req_data,
1080                                   void *private_data, int offset)
1081{
1082        event->param.conn.private_data = private_data + offset;
1083        event->param.conn.private_data_len = IB_CM_REQ_PRIVATE_DATA_SIZE - offset;
1084        event->param.conn.responder_resources = req_data->responder_resources;
1085        event->param.conn.initiator_depth = req_data->initiator_depth;
1086        event->param.conn.flow_control = req_data->flow_control;
1087        event->param.conn.retry_count = req_data->retry_count;
1088        event->param.conn.rnr_retry_count = req_data->rnr_retry_count;
1089        event->param.conn.srq = req_data->srq;
1090        event->param.conn.qp_num = req_data->remote_qpn;
1091}
1092
1093static int cma_req_handler(struct ib_cm_id *cm_id, struct ib_cm_event *ib_event)
1094{
1095        struct rdma_id_private *listen_id, *conn_id;
1096        struct rdma_cm_event event;
1097        int offset, ret;
1098
1099        listen_id = cm_id->context;
1100        if (cma_disable_callback(listen_id, CMA_LISTEN))
1101                return -ECONNABORTED;
1102
1103        memset(&event, 0, sizeof event);
1104        offset = cma_user_data_offset(listen_id->id.ps);
1105        event.event = RDMA_CM_EVENT_CONNECT_REQUEST;
1106        if (cma_is_ud_ps(listen_id->id.ps)) {
1107                conn_id = cma_new_udp_id(&listen_id->id, ib_event);
1108                event.param.ud.private_data = ib_event->private_data + offset;
1109                event.param.ud.private_data_len =
1110                                IB_CM_SIDR_REQ_PRIVATE_DATA_SIZE - offset;
1111        } else {
Show full sources