diff options
author | Herbert Xu <herbert@gondor.apana.org.au> | 2004-06-17 18:08:54 -0700 |
---|---|---|
committer | Linus Torvalds <torvalds@ppc970.osdl.org> | 2004-06-17 18:08:54 -0700 |
commit | 34485ee4cb43eca0225888a43f5db2a472f2aad4 (patch) | |
tree | d8bb4fd777b8ca2ff83f76a250df0db032de941a /kernel | |
parent | af5bb145f0399c6a60a651a74ec3a7d2a58be125 (diff) | |
download | history-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.c | 22 |
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; } |