down(&ctx->file->mutex); if (ctx->file != file) result = -EINVAL; else result = ib_send_cm_mra(ctx->cm_id, cmd.timeout, data, cmd.len);  up(&ctx->file->mutex); ib_ucm_ctx_put(ctx);  done:
static ssize_t ib_ucm_send_mra(struct ib_ucm_file *file,			       const char __user *inbuf,			       int in_len, int out_len){	struct ib_ucm_context *ctx;	struct ib_ucm_mra cmd;	const void *data = NULL;	int result;	if (copy_from_user(&cmd, inbuf, sizeof(cmd)))		return -EFAULT;	result = ib_ucm_alloc_data(&data, cmd.data, cmd.len);	if (result)		return result;	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_mra(ctx->cm_id, cmd.timeout,					data, cmd.len);	up(&ctx->file->mutex);	ib_ucm_ctx_put(ctx); /* func reference */done:	kfree(data);	return result;}