--- mm/slub.c | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) Index: linux-2.6.21-rc6/mm/slub.c =================================================================== --- linux-2.6.21-rc6.orig/mm/slub.c 2007-04-11 12:32:27.000000000 -0700 +++ linux-2.6.21-rc6/mm/slub.c 2007-04-11 12:38:40.000000000 -0700 @@ -1127,11 +1127,22 @@ static void flusher(struct work_struct * static void flush_all(struct kmem_cache *s) { if (atomic_read(&s->cpu_slabs)) { + printk(KERN_ERR "flush_all: Flushing %s cpu_slabs=%d\n", + s->name, atomic_read(&s->cpu_slabs)); mutex_lock(&s->flushing); cancel_delayed_work(&s->flush); atomic_set(&s->cpu_slabs, 0); on_each_cpu(flush_cpu_slab, s, 1, 1); mutex_unlock(&s->flushing); + } else + { + int cpu; + + for_each_online_cpu(cpu) { + if (s->cpu_slab[cpu]) + printk(KERN_ERR "Flush all: %s but active slab on cpu %d\n", + s->name, cpu); + } } } #else @@ -1718,7 +1729,7 @@ static int kmem_cache_open(struct kmem_c * We fix the situation up later when sysfs is brought up * by flushing all slabs (which puts slabcaches that are used * only / mostly during boot in a nice quiet state). - */. + */ atomic_set(&s->cpu_slabs, 1); INIT_DELAYED_WORK(&s->flush, flusher);