[Devel] [PATCH rh7 7/7] ms/mm/memcontrol.c: fix order calculation in try_charge()

Andrey Ryabinin aryabinin at virtuozzo.com
Fri Mar 31 06:51:11 PDT 2017

commit 3608de0787e51d3d826656e105524b48ade7b16f upstream.

Since commit 6539cc053869 ("mm: memcontrol: fold mem_cgroup_do_charge()"),
the order to pass to mem_cgroup_oom() is calculated by passing the
number of pages to get_order() instead of the expected size in bytes.
AFAICT, it only affects the value displayed in the oom warning message.
This patch fix this.

Michal said:

: We haven't noticed that just because the OOM is enabled only for page
: faults of order-0 (single page) and get_order work just fine.  Thanks for
: noticing this.  If we ever start triggering OOM on different orders this
: would be broken.

Signed-off-by: Jerome Marchand <jmarchan at redhat.com>
Acked-by: Michal Hocko <mhocko at suse.com>
Acked-by: Johannes Weiner <hannes at cmpxchg.org>
Signed-off-by: Andrew Morton <akpm at linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds at linux-foundation.org>

Signed-off-by: Andrey Ryabinin <aryabinin at virtuozzo.com>
 mm/memcontrol.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/mm/memcontrol.c b/mm/memcontrol.c
index 1999dff..30ea89a 100644
--- a/mm/memcontrol.c
+++ b/mm/memcontrol.c
@@ -2811,7 +2811,7 @@ retry:
 	if (fatal_signal_pending(current))
 		goto bypass;
-	mem_cgroup_oom(mem_over_limit, gfp_mask, get_order(batch));
+	mem_cgroup_oom(mem_over_limit, gfp_mask, get_order(batch * PAGE_SIZE));
 	mem_cgroup_inc_failcnt(mem_over_limit, gfp_mask, nr_pages);

More information about the Devel mailing list