]> www.pilppa.org Git - linux-2.6-omap-h63xx.git/blobdiff - mm/slab.c
cpu hotplug: slab: fix memory leak in cpu hotplug error path
[linux-2.6-omap-h63xx.git] / mm / slab.c
index 671588497e82ae2b4569220fbf145c56c6fd54e6..54eb555c4ef8596a605e616e17652b9b7b190d81 100644 (file)
--- a/mm/slab.c
+++ b/mm/slab.c
@@ -1282,13 +1282,18 @@ static int __cpuinit cpuup_prepare(long cpu)
                        shared = alloc_arraycache(node,
                                cachep->shared * cachep->batchcount,
                                0xbaadf00d);
-                       if (!shared)
+                       if (!shared) {
+                               kfree(nc);
                                goto bad;
+                       }
                }
                if (use_alien_caches) {
                        alien = alloc_alien_cache(node, cachep->limit);
-                       if (!alien)
+                       if (!alien) {
+                               kfree(shared);
+                               kfree(nc);
                                goto bad;
+                       }
                }
                cachep->array[cpu] = nc;
                l3 = cachep->nodelists[node];
@@ -1315,6 +1320,7 @@ static int __cpuinit cpuup_prepare(long cpu)
        }
        return 0;
 bad:
+       cpuup_canceled(cpu);
        return -ENOMEM;
 }