/* We get called holding the mru->lock, which we drop and then reacquire. Sparse need special help with this to tell it we know what we are doing.  */
STATIC void _xfs_mru_cache_clear_reap_list(xfs_mru_cache_t *mru) __releases(mru -> lock) __acquires(mru->lock)
/* We get called holding the mru->lock, which we drop and then reacquire. Sparse need special help with this to tell it we know what we are doing.  */
STATIC void _xfs_mru_cache_clear_reap_list(xfs_mru_cache_t *mru) __releases(mru -> lock) __acquires(mru->lock)
{
	xfs_mru_cache_elem_t	*elem, *next;
	struct list_head	tmp;
	INIT_LIST_HEAD(&tmp);
	list_for_each_entry_safe(elem, next, &mru->reap_list, list_node) {
		radix_tree_delete(&mru->store, elem->key);
		list_move(&elem->list_node, &tmp);
	}
	spin_unlock(&mru->lock);
	list_for_each_entry_safe(elem, next, &tmp, list_node) {
		list_del_init(&elem->list_node);
		mru->free_func(elem->key, elem->value);
		kmem_zone_free(xfs_mru_elem_zone, elem);
	}
	spin_lock(&mru->lock);
}