ctx = ib_ucm_ctx_get(cmd.id); if (!ctx) { result = -ENOENT; goto done; }
ctx = ib_ucm_ctx_get(file, cmd.id); if (!IS_ERR(ctx)) { result = ib_send_cm_req(ctx->cm_id, &param); ib_ucm_ctx_put(ctx); } else result = PTR_ERR(ctx);
static ssize_t ib_ucm_send_req(struct ib_ucm_file *file,			       const char __user *inbuf,			       int in_len, int out_len){	struct ib_cm_req_param param;	struct ib_ucm_context *ctx;	struct ib_ucm_req cmd;	int result;	param.private_data   = NULL;	param.primary_path   = NULL;	param.alternate_path = NULL;	if (copy_from_user(&cmd, inbuf, sizeof(cmd)))		return -EFAULT;	result = ib_ucm_alloc_data(&param.private_data, cmd.data, cmd.len);	if (result)		goto done;	result = ib_ucm_path_get(&param.primary_path, cmd.primary_path);	if (result)		goto done;	result = ib_ucm_path_get(&param.alternate_path, cmd.alternate_path);	if (result)		goto done;	param.private_data_len           = cmd.len;	param.service_id                 = cmd.sid;	param.qp_num                     = cmd.qpn;	param.qp_type                    = cmd.qp_type;	param.starting_psn               = cmd.psn;	param.peer_to_peer               = cmd.peer_to_peer;	param.responder_resources        = cmd.responder_resources;	param.initiator_depth            = cmd.initiator_depth;	param.remote_cm_response_timeout = cmd.remote_cm_response_timeout;	param.flow_control               = cmd.flow_control;	param.local_cm_response_timeout  = cmd.local_cm_response_timeout;	param.retry_count                = cmd.retry_count;	param.rnr_retry_count            = cmd.rnr_retry_count;	param.max_cm_retries             = cmd.max_cm_retries;	param.srq                        = cmd.srq;	ctx = ib_ucm_ctx_get(cmd.id);	if (!ctx) {		result = -ENOENT;		goto done;	} 	down(&ctx->file->mutex);	if (ctx->file != file)		result = -EINVAL;	else		result = ib_send_cm_req(ctx->cm_id, &param);	up(&ctx->file->mutex);	ib_ucm_ctx_put(ctx); /* func reference */done:	kfree(param.private_data);	kfree(param.primary_path);	kfree(param.alternate_path);	return result;}