void mb2_cache_entry_delete_block(struct mb2_cache *cache, u32 key,
				  sector_t block)
{
	struct hlist_bl_node *node;
	struct hlist_bl_head *head;
	struct mb2_cache_entry *entry;

	head = &cache->c_hash[hash_32(key, cache->c_bucket_bits)];
	hlist_bl_lock(head);
	hlist_bl_for_each_entry(entry, node, head, e_hash_list) {
		if (entry->e_key == key && entry->e_block == block) {
			/* We keep hash list reference to keep entry alive */
			hlist_bl_del_init(&entry->e_hash_list);
			hlist_bl_unlock(head);
			spin_lock(&cache->c_lru_list_lock);
			if (!list_empty(&entry->e_lru_list)) {
				list_del_init(&entry->e_lru_list);
				cache->c_entry_count--;
				atomic_dec(&entry->e_refcnt);
			}
			spin_unlock(&cache->c_lru_list_lock);
			mb2_cache_entry_put(cache, entry);
			return;
		}
	}
	hlist_bl_unlock(head);
}
void mb2_cache_entry_delete_block(struct mb2_cache *cache, u32 key,
				  sector_t block)
{
	struct hlist_bl_node *node;
	struct hlist_bl_head *head;
	struct mb2_cache_entry *entry;

	head = &cache->c_hash[hash_32(key, cache->c_bucket_bits)];
	hlist_bl_lock(head);
	hlist_bl_for_each_entry(entry, node, head, e_hash_list) {
		if (entry->e_key == key && entry->e_block == block) {
			 
			hlist_bl_del_init(&entry->e_hash_list);
			hlist_bl_unlock(head);
			spin_lock(&cache->c_lru_list_lock);
			if (!list_empty(&entry->e_lru_list)) {
				list_del_init(&entry->e_lru_list);
				cache->c_entry_count--;
				atomic_dec(&entry->e_refcnt);
			}
			spin_unlock(&cache->c_lru_list_lock);
			mb2_cache_entry_put(cache, entry);
			return;
		}
	}
	hlist_bl_unlock(head);
}