ib_ucm_destroy_ctx(file, ctx->id); 
down(&ctx_id_mutex); idr_remove(&ctx_id_table, ctx->id); up(&ctx_id_mutex);  if (!IS_ERR(ctx->cm_id)) ib_destroy_cm_id(ctx->cm_id);  kfree(ctx); 
static ssize_t ib_ucm_create_id(struct ib_ucm_file *file,				const char __user *inbuf,				int in_len, int out_len){	struct ib_ucm_create_id cmd;	struct ib_ucm_create_id_resp resp;	struct ib_ucm_context *ctx;	int result;	if (out_len < sizeof(resp))		return -ENOSPC;	if (copy_from_user(&cmd, inbuf, sizeof(cmd)))		return -EFAULT;	down(&file->mutex);	ctx = ib_ucm_ctx_alloc(file);	up(&file->mutex);	if (!ctx)		return -ENOMEM;	ctx->cm_id = ib_create_cm_id(ib_ucm_event_handler, ctx);	if (IS_ERR(ctx->cm_id)) {		result = PTR_ERR(ctx->cm_id);		goto err;	}	resp.id = ctx->id;	if (copy_to_user((void __user *)(unsigned long)cmd.response,			 &resp, sizeof(resp))) {		result = -EFAULT;		goto err;	}	return 0;err:	ib_ucm_destroy_ctx(file, ctx->id);	return result;}
4520	/local/tlutelli/issta_data/temp/c/2005_temp/2005/4520/0b2b35f68140ceeb1b78ef85680198e63ebc8649/ucm.c/clean/drivers/infiniband/core/ucm.c