Index: current/mm/slab.c =================================================================== --- current.orig/mm/slab.c 2007-02-01 15:07:09.000000000 -0800 +++ current/mm/slab.c 2007-02-01 15:09:21.000000000 -0800 @@ -1274,10 +1274,12 @@ static int __cpuinit cpuup_callback(stru case CPU_DOWN_PREPARE: /* * Shutdown cache reaper. Note that the cache_chain_mutex is - * held so that cache_reap() cannot modify reap_work - * concurrently. + * held so that if cache_reap() is invoked it cannot do + * anything expensive but will only modify reap_work + * and reschedule the timer. */ cancel_rearming_delayed_work(&per_cpu(reap_work, cpu)); + /* Now the cache_reaper is guaranteed to be not running. */ per_cpu(reap_work, cpu).work.func = NULL; break; case CPU_DOWN_FAILED: