aboutsummaryrefslogtreecommitdiffstats
path: root/mm/slab.c
diff options
context:
space:
mode:
authorAkinobu Mita <akinobu.mita@gmail.com>2007-10-18 06:05:11 -0400
committerLinus Torvalds <torvalds@woody.linux-foundation.org>2007-10-18 17:37:21 -0400
commit12d00f6a121877235a5cacc56386936dd9bb81af (patch)
treedc8aafc8ae729f299b43cffa73c15406e76f76a7 /mm/slab.c
parentfbf1e473bd0ecc080a4c37bb89848b16c59ac18b (diff)
cpu hotplug: slab: fix memory leak in cpu hotplug error path
This patch fixes memory leak in error path. In reality, we don't need to call cpuup_canceled(cpu) for now. But upcoming cpu hotplug error handling change needs this. Cc: Christoph Lameter <clameter@sgi.com> Cc: Gautham R Shenoy <ego@in.ibm.com> Acked-by: Pekka Enberg <penberg@cs.helsinki.fi> Signed-off-by: Akinobu Mita <akinobu.mita@gmail.com> Cc: Gautham R Shenoy <ego@in.ibm.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.c10
1 files changed, 8 insertions, 2 deletions
diff --git a/mm/slab.c b/mm/slab.c
index 671588497e82..54eb555c4ef8 100644
--- a/mm/slab.c
+++ b/mm/slab.c
@@ -1282,13 +1282,18 @@ static int __cpuinit cpuup_prepare(long cpu)
1282 shared = alloc_arraycache(node, 1282 shared = alloc_arraycache(node,
1283 cachep->shared * cachep->batchcount, 1283 cachep->shared * cachep->batchcount,
1284 0xbaadf00d); 1284 0xbaadf00d);
1285 if (!shared) 1285 if (!shared) {
1286 kfree(nc);
1286 goto bad; 1287 goto bad;
1288 }
1287 } 1289 }
1288 if (use_alien_caches) { 1290 if (use_alien_caches) {
1289 alien = alloc_alien_cache(node, cachep->limit); 1291 alien = alloc_alien_cache(node, cachep->limit);
1290 if (!alien) 1292 if (!alien) {
1293 kfree(shared);
1294 kfree(nc);
1291 goto bad; 1295 goto bad;
1296 }
1292 } 1297 }
1293 cachep->array[cpu] = nc; 1298 cachep->array[cpu] = nc;
1294 l3 = cachep->nodelists[node]; 1299 l3 = cachep->nodelists[node];
@@ -1315,6 +1320,7 @@ static int __cpuinit cpuup_prepare(long cpu)
1315 } 1320 }
1316 return 0; 1321 return 0;
1317bad: 1322bad:
1323 cpuup_canceled(cpu);
1318 return -ENOMEM; 1324 return -ENOMEM;
1319} 1325}
1320 1326