Re: [PATCH v2] mm/slub: Run free_partial() outside of the kmem_cache_node->list_lock

2016-08-09 Thread Vladimir Davydov
On Tue, Aug 09, 2016 at 04:27:46PM +0100, Chris Wilson wrote: ... > diff --git a/mm/slub.c b/mm/slub.c > index 825ff45..58f0eb6 100644 > --- a/mm/slub.c > +++ b/mm/slub.c > @@ -3479,6 +3479,7 @@ static void list_slab_objects(struct kmem_cache *s, > struct page *page, > */ > static void free_par

Re: [PATCH v2] mm/slub: Run free_partial() outside of the kmem_cache_node->list_lock

2016-08-09 Thread Vladimir Davydov
On Tue, Aug 09, 2016 at 04:52:13PM +0100, Chris Wilson wrote: ... > > > @@ -3486,13 +3487,16 @@ static void free_partial(struct kmem_cache *s, > > > struct kmem_cache_node *n) > > > list_for_each_entry_safe(page, h, &n->partial, lru) { > > > if (!page->inuse) { > > >

Re: [PATCH v2] mm/slub: Run free_partial() outside of the kmem_cache_node->list_lock

2016-08-09 Thread Chris Wilson
On Tue, Aug 09, 2016 at 06:45:39PM +0300, Vladimir Davydov wrote: > On Tue, Aug 09, 2016 at 04:27:46PM +0100, Chris Wilson wrote: > ... > > diff --git a/mm/slub.c b/mm/slub.c > > index 825ff45..58f0eb6 100644 > > --- a/mm/slub.c > > +++ b/mm/slub.c > > @@ -3479,6 +3479,7 @@ static void list_slab_ob

[PATCH v2] mm/slub: Run free_partial() outside of the kmem_cache_node->list_lock

2016-08-09 Thread Chris Wilson
With debugobjects enabled and using SLAB_DESTROY_BY_RCU, when a kmem_cache_node is destroyed the call_rcu() may trigger a slab allocation to fill the debug object pool (__debug_object_init:fill_pool). Everywhere but during kmem_cache_destroy(), discard_slab() is performed outside of the kmem_cache_