Fix issues in cpuup. Signed-off-by: Christoph Lameter --- mm/slub.c | 22 +++++++++++++++------- 1 file changed, 15 insertions(+), 7 deletions(-) Index: linux-2.6.22-rc4-mm2/mm/slub.c =================================================================== --- linux-2.6.22-rc4-mm2.orig/mm/slub.c 2007-06-18 18:41:57.000000000 -0700 +++ linux-2.6.22-rc4-mm2/mm/slub.c 2007-06-18 18:42:01.000000000 -0700 @@ -2016,21 +2016,28 @@ static int alloc_kmem_cache_cpus(struct return 1; } +/* + * Initialize the per cpu array. + */ +static void init_alloc_cpu_cpu(int cpu) +{ + int i; + + for (i = NR_KMEM_CACHE_CPU - 1; i >= 0; i--) + free_kmem_cache_cpu(&per_cpu(kmem_cache_cpu, cpu)[i], cpu); +} + static void __init init_alloc_cpu(void) { int cpu; - int i; - for_each_online_cpu(cpu) { - for (i = NR_KMEM_CACHE_CPU - 1; i >= 0; i--) - free_kmem_cache_cpu(&per_cpu(kmem_cache_cpu, cpu)[i], - cpu); - } + for_each_online_cpu(cpu) + init_alloc_cpu_cpu(cpu); } #else static inline void free_kmem_cache_cpus(struct kmem_cache *s) {} -static inline void init_alloc_cpu(struct kmem_cache *s) {} +static inline void init_alloc_cpu(void) {} static inline int alloc_kmem_cache_cpus(struct kmem_cache *s, gfp_t flags) { @@ -3244,6 +3251,7 @@ static int __cpuinit slab_cpuup_callback switch (action) { case CPU_UP_PREPARE: case CPU_UP_PREPARE_FROZEN: + init_alloc_cpu_cpu(cpu); down_read(&slub_lock); list_for_each_entry(s, &slab_caches, list) s->cpu_slab[cpu] = alloc_kmem_cache_cpu(cpu,