diff options
author | Christoph Lameter <clameter@sgi.com> | 2007-05-09 11:34:22 +0200 |
---|---|---|
committer | Linus Torvalds <torvalds@woody.linux-foundation.org> | 2007-05-09 21:30:53 +0200 |
commit | 5830c5902138f80b0a097b797200c739466beedd (patch) | |
tree | f325f18365db79f9d17793b8d551e81094f48e15 /mm/slab.c | |
parent | zap_other_threads: remove unneeded ->exit_signal change (diff) | |
download | linux-5830c5902138f80b0a097b797200c739466beedd.tar.xz linux-5830c5902138f80b0a097b797200c739466beedd.zip |
slab: shut down cache_reaper when cpu goes down
Shutdown the cache_reaper if the cpu is brought down and set the
cache_reap.func to NULL. Otherwise hotplug shuts down the reaper for good.
Signed-off-by: Christoph Lameter <clameter@sgi.com>
Cc: Oleg Nesterov <oleg@tv-sign.ru>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Diffstat (limited to 'mm/slab.c')
-rw-r--r-- | mm/slab.c | 14 |
1 files changed, 14 insertions, 0 deletions
diff --git a/mm/slab.c b/mm/slab.c index cceb347a354e..1a7a10de2a4d 100644 --- a/mm/slab.c +++ b/mm/slab.c @@ -1279,6 +1279,20 @@ static int __cpuinit cpuup_callback(struct notifier_block *nfb, start_cpu_timer(cpu); break; #ifdef CONFIG_HOTPLUG_CPU + case CPU_DOWN_PREPARE: + /* + * Shutdown cache reaper. Note that the cache_chain_mutex is + * 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: + start_cpu_timer(cpu); + break; case CPU_DEAD: /* * Even if all the cpus of a node are down, we don't free the |