aboutsummaryrefslogtreecommitdiffstats
path: root/mm/swapfile.c
diff options
context:
space:
mode:
authorCesar Eduardo Barros <cesarb@cesarb.net>2011-03-22 19:33:14 -0400
committerLinus Torvalds <torvalds@linux-foundation.org>2011-03-22 20:44:05 -0400
commit803d0c8351b47b72b8b018457a33b342557b90a2 (patch)
treefeb660ed5b7b6fd3dfba9ec3e6f121c777ba6252 /mm/swapfile.c
parentcc5d462f7777c06c5cf0b55d736be325cda747b3 (diff)
sys_swapon: use vzalloc() instead of vmalloc/memset
This patch series refactors the sys_swapon function. sys_swapon is currently a very large function, with 313 lines (more than 12 25-line screens), which can make it a bit hard to read. This patch series reduces this size by half, by extracting large chunks of related code to new helper functions. One of these chunks of code was nearly identical to the part of sys_swapoff which is used in case of a failure return from try_to_unuse(), so this patch series also makes both share the same code. As a side effect of all this refactoring, the compiled code gets a bit smaller (from v1 of this patch series): text data bss dec hex filename 14012 944 276 15232 3b80 mm/swapfile.o.before 13941 944 276 15161 3b39 mm/swapfile.o.after This patch: Use vzalloc() instead of vmalloc/memset. Signed-off-by: Cesar Eduardo Barros <cesarb@cesarb.net> Tested-by: Eric B Munson <emunson@mgebm.net> Acked-by: Eric B Munson <emunson@mgebm.net> Reviewed-by: Pekka Enberg <penberg@kernel.org> Reviewed-by: Jesper Juhl <jj@chaosbits.net> Reviewed-by: KAMEZAWA Hiroyuki <kamezawa.hiroyu@jp.fujitsu.com> Cc: Hugh Dickins <hughd@google.com> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Diffstat (limited to 'mm/swapfile.c')
-rw-r--r--mm/swapfile.c3
1 files changed, 1 insertions, 2 deletions
diff --git a/mm/swapfile.c b/mm/swapfile.c
index 6d6d28c0a72f..99eb5048b7a8 100644
--- a/mm/swapfile.c
+++ b/mm/swapfile.c
@@ -2047,13 +2047,12 @@ SYSCALL_DEFINE2(swapon, const char __user *, specialfile, int, swap_flags)
2047 goto bad_swap; 2047 goto bad_swap;
2048 2048
2049 /* OK, set up the swap map and apply the bad block list */ 2049 /* OK, set up the swap map and apply the bad block list */
2050 swap_map = vmalloc(maxpages); 2050 swap_map = vzalloc(maxpages);
2051 if (!swap_map) { 2051 if (!swap_map) {
2052 error = -ENOMEM; 2052 error = -ENOMEM;
2053 goto bad_swap; 2053 goto bad_swap;
2054 } 2054 }
2055 2055
2056 memset(swap_map, 0, maxpages);
2057 nr_good_pages = maxpages - 1; /* omit header page */ 2056 nr_good_pages = maxpages - 1; /* omit header page */
2058 2057
2059 for (i = 0; i < swap_header->info.nr_badpages; i++) { 2058 for (i = 0; i < swap_header->info.nr_badpages; i++) {