aboutsummaryrefslogtreecommitdiffstats
path: root/kernel
diff options
context:
space:
mode:
authorHerbert Xu <herbert@gondor.apana.org.au>2004-06-17 18:08:54 -0700
committerLinus Torvalds <torvalds@ppc970.osdl.org>2004-06-17 18:08:54 -0700
commit34485ee4cb43eca0225888a43f5db2a472f2aad4 (patch)
treed8bb4fd777b8ca2ff83f76a250df0db032de941a /kernel
parentaf5bb145f0399c6a60a651a74ec3a7d2a58be125 (diff)
downloadhistory-34485ee4cb43eca0225888a43f5db2a472f2aad4.tar.gz
[PATCH] omdisk memory leak fix
Fix a couple of memory leaks in the pmdisk driver. Signed-off-by: Andrew Morton <akpm@osdl.org> Signed-off-by: Linus Torvalds <torvalds@osdl.org>
Diffstat (limited to 'kernel')
-rw-r--r--kernel/power/pmdisk.c22
1 files changed, 11 insertions, 11 deletions
diff --git a/kernel/power/pmdisk.c b/kernel/power/pmdisk.c
index 22855abbdd6ef9..1bff954d688989 100644
--- a/kernel/power/pmdisk.c
+++ b/kernel/power/pmdisk.c
@@ -795,6 +795,7 @@ static int __init relocate_pagedir(void)
suspend_pagedir_t *new_pagedir, *old_pagedir = pm_pagedir_nosave;
void **eaten_memory = NULL;
void **c = eaten_memory, *m, *f;
+ int err;
pr_debug("pmdisk: Relocating pagedir\n");
@@ -803,32 +804,31 @@ static int __init relocate_pagedir(void)
return 0;
}
+ err = -ENOMEM;
while ((m = (void *) __get_free_pages(GFP_ATOMIC, pagedir_order))) {
memset(m, 0, PAGE_SIZE);
- if (!does_collide_order(old_pagedir, (unsigned long)m, pagedir_order))
+ if (!does_collide_order(old_pagedir, (unsigned long)m,
+ pagedir_order)) {
+ pm_pagedir_nosave = new_pagedir = m;
+ copy_pagedir(new_pagedir, old_pagedir);
+ err = 0;
break;
+ }
eaten_memory = m;
printk( "." );
*eaten_memory = c;
c = eaten_memory;
}
- if (!m)
- return -ENOMEM;
-
- pm_pagedir_nosave = new_pagedir = m;
- copy_pagedir(new_pagedir, old_pagedir);
-
c = eaten_memory;
while(c) {
printk(":");
- f = *c;
+ f = c;
c = *c;
- if (f)
- free_pages((unsigned long)f, pagedir_order);
+ free_pages((unsigned long)f, pagedir_order);
}
printk("|\n");
- return 0;
+ return err;
}