done: up(&ctx->file->mutex); ib_ucm_ctx_put(ctx); /* func reference */ 
ib_ucm_ctx_put(ctx); 
static ssize_t ib_ucm_attr_id(struct ib_ucm_file *file,			      const char __user *inbuf,			      int in_len, int out_len){	struct ib_ucm_attr_id_resp resp;	struct ib_ucm_attr_id cmd;	struct ib_ucm_context *ctx;	int result = 0;	if (out_len < sizeof(resp))		return -ENOSPC;	if (copy_from_user(&cmd, inbuf, sizeof(cmd)))		return -EFAULT;	ctx = ib_ucm_ctx_get(cmd.id);	if (!ctx)		return -ENOENT; 	down(&ctx->file->mutex);	if (ctx->file != file) {		result = -EINVAL;		goto done;	}	resp.service_id   = ctx->cm_id->service_id;	resp.service_mask = ctx->cm_id->service_mask;	resp.local_id     = ctx->cm_id->local_id;	resp.remote_id    = ctx->cm_id->remote_id;	if (copy_to_user((void __user *)(unsigned long)cmd.response,			 &resp, sizeof(resp)))		result = -EFAULT;done:	up(&ctx->file->mutex);	ib_ucm_ctx_put(ctx); /* func reference */	return result;}
10457	/local/tlutelli/issta_data/temp/c/2005_temp/2005/10457/b9ef520f9caf20aba8ac7cb2bbba45b52ff19d53/ucm.c/clean/drivers/infiniband/core/ucm.c