销毁缓存首先要保证的一点就是缓存当中所有的对象都是空闲的,也就是之前分配出去的对象都已经释放回来了,其主要的步骤如下
1.将缓存从cache_chain链表中删除
2.将本地高速缓存、alien高速缓存和共享本地高速缓存中的对象都释放回slab并释放所有的free链表,然后判断full链表以及partial链表是否都为空,如果有一个不为空说明存在非空闲slab,也就是说有对象还未释放,此时无法销毁缓存,重新将缓存添加到cache_chain链表中
3.确定所有的slab都为空闲状态后,将缓存涉及到的所有描述符都释放(这些描述符都是保存在普通高速缓存中的)
相关阅读:
负责销毁缓存的函数为kmem_cache_destroy()