summaryrefslogtreecommitdiff
path: root/mm
diff options
context:
space:
mode:
authorChristoph Lameter <clameter@sgi.com>2008-06-21 16:46:35 -0700
committerLinus Torvalds <torvalds@linux-foundation.org>2008-06-21 16:51:02 -0700
commit481c5346d0981940ee63037eb53e4e37b0735c10 (patch)
tree3fcae626ec4e1d4e698008671cfd62d794992ac5 /mm
parent62a8efe632be1815b544845db643f1fcd9afcfb0 (diff)
downloadlinux-3.10-481c5346d0981940ee63037eb53e4e37b0735c10.tar.gz
linux-3.10-481c5346d0981940ee63037eb53e4e37b0735c10.tar.bz2
linux-3.10-481c5346d0981940ee63037eb53e4e37b0735c10.zip
Slab: Fix memory leak in fallback_alloc()
The zonelist patches caused the loop that checks for available objects in permitted zones to not terminate immediately. One object per zone per allocation may be allocated and then abandoned. Break the loop when we have successfully allocated one object. Signed-off-by: Christoph Lameter <clameter@sgi.com> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Diffstat (limited to 'mm')
-rw-r--r--mm/slab.c5
1 files changed, 4 insertions, 1 deletions
diff --git a/mm/slab.c b/mm/slab.c
index 06236e4ddc1..046607f05f3 100644
--- a/mm/slab.c
+++ b/mm/slab.c
@@ -3263,9 +3263,12 @@ retry:
if (cpuset_zone_allowed_hardwall(zone, flags) &&
cache->nodelists[nid] &&
- cache->nodelists[nid]->free_objects)
+ cache->nodelists[nid]->free_objects) {
obj = ____cache_alloc_node(cache,
flags | GFP_THISNODE, nid);
+ if (obj)
+ break;
+ }
}
if (!obj) {