summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorshin, jacob <jacob.shin@amd.com>2006-04-28 10:54:37 -0500
committerLinus Torvalds <torvalds@g5.osdl.org>2006-04-28 09:00:35 -0700
commit693f7d362055261882659475d2ef022e32edbff1 (patch)
treec363d0ededf3ede77f7f35130931f5fc34ca0e30
parent4de0b1ee1b630318553248c4cfc78358720a5c84 (diff)
downloadlinux-3.10-693f7d362055261882659475d2ef022e32edbff1.tar.gz
linux-3.10-693f7d362055261882659475d2ef022e32edbff1.tar.bz2
linux-3.10-693f7d362055261882659475d2ef022e32edbff1.zip
[PATCH] slab: fix crash on __drain_alien_cahce() during CPU Hotplug
transfer_objects should only be called when all of the cpus in the node are online. CPU_DEAD notifier callback marks l3->shared to NULL. Signed-off-by: Jacob Shin <jacob.shin@amd.com> Signed-off-by: Linus Torvalds <torvalds@osdl.org>
-rw-r--r--mm/slab.c3
1 files changed, 2 insertions, 1 deletions
diff --git a/mm/slab.c b/mm/slab.c
index af5c5237e11..c32af7e7581 100644
--- a/mm/slab.c
+++ b/mm/slab.c
@@ -979,7 +979,8 @@ static void __drain_alien_cache(struct kmem_cache *cachep,
* That way we could avoid the overhead of putting the objects
* into the free lists and getting them back later.
*/
- transfer_objects(rl3->shared, ac, ac->limit);
+ if (rl3->shared)
+ transfer_objects(rl3->shared, ac, ac->limit);
free_block(cachep, ac->entry, ac->avail, node);
ac->avail = 0;