if (cache->c_block_hash) kfree(cache->c_block_hash); 
kfree(cache->c_block_hash); 
mb_cache_create(const char *name, struct mb_cache_op *cache_op,		size_t entry_size, int indexes_count, int bucket_bits){	int m=0, n, bucket_count = 1 << bucket_bits;	struct mb_cache *cache = NULL;	if(entry_size < sizeof(struct mb_cache_entry) +	   indexes_count * sizeof(((struct mb_cache_entry *) 0)->e_indexes[0]))		return NULL;	cache = kmalloc(sizeof(struct mb_cache) +	                indexes_count * sizeof(struct list_head), GFP_KERNEL);	if (!cache)		goto fail;	cache->c_name = name;	cache->c_op.free = NULL;	if (cache_op)		cache->c_op.free = cache_op->free;	atomic_set(&cache->c_entry_count, 0);	cache->c_bucket_bits = bucket_bits;#ifdef MB_CACHE_INDEXES_COUNT	mb_assert(indexes_count == MB_CACHE_INDEXES_COUNT);#else	cache->c_indexes_count = indexes_count;#endif	cache->c_block_hash = kmalloc(bucket_count * sizeof(struct list_head),	                              GFP_KERNEL);	if (!cache->c_block_hash)		goto fail;	for (n=0; n<bucket_count; n++)		INIT_LIST_HEAD(&cache->c_block_hash[n]);	for (m=0; m<indexes_count; m++) {		cache->c_indexes_hash[m] = kmalloc(bucket_count *		                                 sizeof(struct list_head),		                                 GFP_KERNEL);		if (!cache->c_indexes_hash[m])			goto fail;		for (n=0; n<bucket_count; n++)			INIT_LIST_HEAD(&cache->c_indexes_hash[m][n]);	}	cache->c_entry_cache = kmem_cache_create(name, entry_size, 0,		SLAB_RECLAIM_ACCOUNT, NULL, NULL);	if (!cache->c_entry_cache)		goto fail;	spin_lock(&mb_cache_spinlock);	list_add(&cache->c_cache_list, &mb_cache_list);	spin_unlock(&mb_cache_spinlock);	return cache;fail:	if (cache) {		while (--m >= 0)			kfree(cache->c_indexes_hash[m]);		if (cache->c_block_hash)			kfree(cache->c_block_hash);		kfree(cache);	}	return NULL;}
4520	/local/tlutelli/issta_data/temp/c/2005_temp/2005/4520/f99d49adf527fa6f7a9c42257fa76bca6b8df1e3/mbcache.c/clean/fs/mbcache.c