From 09ddf29b02c5087e02f358c2e67e27d17d3a21a7 Mon Sep 17 00:00:00 2001 From: Richard Braun Date: Wed, 29 Jun 2016 15:33:29 +0200 Subject: Fix locking error in the slab allocator * kern/slab.c (kmem_slab_create): Set `slab->cache` member. (kmem_cache_reap): Return dead slabs instead of destroying in place. (slab_collect): Destroy slabs outside of critical section. * kern/slab.h (struct kmem_slab): New `cache` member. --- kern/slab.h | 3 +++ 1 file changed, 3 insertions(+) (limited to 'kern/slab.h') diff --git a/kern/slab.h b/kern/slab.h index 8527c9db..9d8a1156 100644 --- a/kern/slab.h +++ b/kern/slab.h @@ -56,6 +56,8 @@ #include #include +struct kmem_cache; + #if SLAB_USE_CPU_POOLS /* @@ -117,6 +119,7 @@ struct kmem_buftag { * Page-aligned collection of unconstructed buffers. */ struct kmem_slab { + struct kmem_cache *cache; struct list list_node; struct rbtree_node tree_node; unsigned long nr_refs; -- cgit v1.2.3