@@ -2757,32 +2757,33 @@ void kmem_cache_free_bulk(struct kmem_cache *s, size_t size, void **p)
EXPORT_SYMBOL(kmem_cache_free_bulk);
bool kmem_cache_alloc_bulk(struct kmem_cache *s, gfp_t flags, size_t size,
- void **p)
+ void **p)
{
- if (!kmem_cache_debug(s)) {
- struct kmem_cache_cpu *c;
+ struct kmem_cache_cpu *c;
- /* Drain objects in the per cpu slab */
- local_irq_disable();
- c = this_cpu_ptr(s->cpu_slab);
+ /* Debugging fallback to generic bulk */
+ if (kmem_cache_debug(s))
+ return __kmem_cache_alloc_bulk(s, flags, size, p);
- while (size) {
- void *object = c->freelist;
+ /* Drain objects in the per cpu slab */
+ local_irq_disable();
+ c = this_cpu_ptr(s->cpu_slab);
- if (!object)
- break;
+ while (size) {
+ void *object = c->freelist;
- c->freelist = get_freepointer(s, object);
- *p++ = object;
- size--;
+ if (!object)
+ break;
- if (unlikely(flags & __GFP_ZERO))
- memset(object, 0, s->object_size);
- }
- c->tid = next_tid(c->tid);
+ c->freelist = get_freepointer(s, object);
+ *p++ = object;
+ size--;
- local_irq_enable();
+ if (unlikely(flags & __GFP_ZERO))
+ memset(object, 0, s->object_size);
}
+ c->tid = next_tid(c->tid);
+ local_irq_enable();
return __kmem_cache_alloc_bulk(s, flags, size, p);
}
Use kernel early return style to reduce indention level, by testing for kmem_cache_debug() and fallback to none-optimized bulking via __kmem_cache_alloc_bulk(). This also make it easier to fix a bug in the current implementation, in the next patch. Signed-off-by: Jesper Dangaard Brouer <brouer@redhat.com> --- mm/slub.c | 37 +++++++++++++++++++------------------ 1 file changed, 19 insertions(+), 18 deletions(-) -- To unsubscribe from this list: send the line "unsubscribe netdev" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html