diff options
author | Akinobu Mita <akinobu.mita@gmail.com> | 2007-10-18 06:05:11 -0400 |
---|---|---|
committer | Linus Torvalds <torvalds@woody.linux-foundation.org> | 2007-10-18 17:37:21 -0400 |
commit | 12d00f6a121877235a5cacc56386936dd9bb81af (patch) | |
tree | dc8aafc8ae729f299b43cffa73c15406e76f76a7 /mm/slab.c | |
parent | fbf1e473bd0ecc080a4c37bb89848b16c59ac18b (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.c | 10 |
1 files changed, 8 insertions, 2 deletions
@@ -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; |
1317 | bad: | 1322 | bad: |
1323 | cpuup_canceled(cpu); | ||
1318 | return -ENOMEM; | 1324 | return -ENOMEM; |
1319 | } | 1325 | } |
1320 | 1326 | ||