void mb2_cache_destroy(struct mb2_cache *cache)
{
	struct mb2_cache_entry *entry, *next;

	unregister_shrinker(&cache->c_shrink);

	/*
	 * We don't bother with any locking. Cache must not be used at this
	 * point.
	 */
	list_for_each_entry_safe(entry, next, &cache->c_lru_list, e_lru_list) {
		if (!hlist_bl_unhashed(&entry->e_hash_list)) {
			hlist_bl_del_init(&entry->e_hash_list);
			atomic_dec(&entry->e_refcnt);
		} else
			WARN_ON(1);
		list_del(&entry->e_lru_list);
		WARN_ON(atomic_read(&entry->e_refcnt) != 1);
		mb2_cache_entry_put(cache, entry);
	}
	kfree(cache->c_hash);
	kfree(cache);
	module_put(THIS_MODULE);
}
void mb2_cache_destroy(struct mb2_cache *cache)
{
	struct mb2_cache_entry *entry, *next;

	unregister_shrinker(&cache->c_shrink);

	 
	list_for_each_entry_safe(entry, next, &cache->c_lru_list, e_lru_list) {
		if (!hlist_bl_unhashed(&entry->e_hash_list)) {
			hlist_bl_del_init(&entry->e_hash_list);
			atomic_dec(&entry->e_refcnt);
		} else
			WARN_ON(1);
		list_del(&entry->e_lru_list);
		WARN_ON(atomic_read(&entry->e_refcnt) != 1);
		mb2_cache_entry_put(cache, entry);
	}
	kfree(cache->c_hash);
	kfree(cache);
	module_put(THIS_MODULE);
}