up(&file->mutex); ib_ucm_destroy_ctx(file, ctx->id); 
down(&ctx_id_mutex); idr_remove(&ctx_id_table, ctx->id); up(&ctx_id_mutex);  ib_destroy_cm_id(ctx->cm_id); ib_ucm_cleanup_events(ctx); kfree(ctx);  
static int ib_ucm_close(struct inode *inode, struct file *filp){	struct ib_ucm_file *file = filp->private_data;	struct ib_ucm_context *ctx;	down(&file->mutex);	while (!list_empty(&file->ctxs)) {		ctx = list_entry(file->ctxs.next,				 struct ib_ucm_context, file_list);		up(&file->mutex);		ib_ucm_destroy_ctx(file, ctx->id);		down(&file->mutex);	}	up(&file->mutex);	kfree(file);	return 0;}
4520	/local/tlutelli/issta_data/temp/c/2005_temp/2005/4520/0b2b35f68140ceeb1b78ef85680198e63ebc8649/ucm.c/clean/drivers/infiniband/core/ucm.c