memcg: fix off-by-one when calculating swap cgroup map length
authorNamhyung Kim <namhyung@gmail.com>
Thu, 26 May 2011 23:25:30 +0000 (16:25 -0700)
committerLinus Torvalds <torvalds@linux-foundation.org>
Fri, 27 May 2011 00:12:35 +0000 (17:12 -0700)
It allocated one more page than necessary if @max_pages was a multiple of
SC_PER_PAGE.

Signed-off-by: Namhyung Kim <namhyung@gmail.com>
Acked-by: KAMEZAWA Hiroyuki <kamezawa.hiroyu@jp.fujitsu.com>
Acked-by: Balbir Singh <balbir@linux.vnet.ibm.com>
Cc: Daisuke Nishimura <nishimura@mxp.nes.nec.co.jp>
Cc: Michal Hocko <mhocko@suse.cz>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
mm/page_cgroup.c

index 4eb05302e2e19ea484809610a421ecec25b6e253..5524e8bd74378cbbf4cc63727c4a04407ba8918f 100644 (file)
@@ -475,7 +475,7 @@ int swap_cgroup_swapon(int type, unsigned long max_pages)
        if (!do_swap_account)
                return 0;
 
-       length = ((max_pages/SC_PER_PAGE) + 1);
+       length = DIV_ROUND_UP(max_pages, SC_PER_PAGE);
        array_size = length * sizeof(void *);
 
        array = vmalloc(array_size);