On Wed, Jun 20, 2018 at 5:08 AM Andrey Ryabinin <aryabinin@xxxxxxxxxxxxx> wrote: > > > > On 06/20/2018 12:33 AM, Shakeel Butt wrote: > > For !CONFIG_SLUB_DEBUG, SLUB does not maintain the number of slabs > > allocated per node for a kmem_cache. Thus, slabs_node() in > > __kmem_cache_empty() will always return 0. So, in such situation, it is > > required to check per-cpu slabs to make sure if a kmem_cache is empty or > > not. > > > > Please note that __kmem_cache_shutdown() and __kmem_cache_shrink() are > > not affected by !CONFIG_SLUB_DEBUG as they call flush_all() to clear > > per-cpu slabs. > > So what? Yes, they call flush_all() and then check if there are non-empty slabs left. > And that check doesn't work in case of disabled CONFIG_SLUB_DEBUG. > How is flush_all() or per-cpu slabs even relevant here? > The flush_all() will move all cpu slabs and partials to node's partial list and thus later check of node's partial list will handle non-empty slabs situation. However what I missed is the 'full slabs' which are not on any list for !CONFIG_SLUB_DEBUG. So, this patch is not the complete solution. I think David's suggestion is the complete solution. I will post a patch based on David's suggestion.