Skip to content

Commit

Permalink
mm, memcg: fix corruption on 64-bit divisor in memory.high throttling
Browse files Browse the repository at this point in the history
Commit 0e4b01d had a bunch of fixups to use the right division
method.  However, it seems that after all that it still wasn't right --
div_u64 takes a 32-bit divisor.

The headroom is still large (2^32 pages), so on mundane systems you
won't hit this, but this should definitely be fixed.

Fixes: 0e4b01d ("mm, memcg: throttle allocators when failing reclaim over memory.high")
Reported-by: Johannes Weiner <[email protected]>
Signed-off-by: Chris Down <[email protected]>
Signed-off-by: Andrew Morton <[email protected]>
Acked-by: Johannes Weiner <[email protected]>
Cc: Tejun Heo <[email protected]>
Cc: Roman Gushchin <[email protected]>
Cc: Michal Hocko <[email protected]>
Cc: Nathan Chancellor <[email protected]>
Cc: <[email protected]>	[5.4.x+]
Link: http://lkml.kernel.org/r/80780887060514967d414b3cd91f9a316a16ab98.1584036142.git.chris@chrisdown.name
Signed-off-by: Linus Torvalds <[email protected]>
  • Loading branch information
cdown authored and torvalds committed Mar 22, 2020
1 parent d72520a commit d397a45
Showing 1 changed file with 1 addition and 1 deletion.
2 changes: 1 addition & 1 deletion mm/memcontrol.c
Original file line number Diff line number Diff line change
@@ -2339,7 +2339,7 @@ void mem_cgroup_handle_over_high(void)
*/
clamped_high = max(high, 1UL);

overage = div_u64((u64)(usage - high) << MEMCG_DELAY_PRECISION_SHIFT,
overage = div64_u64((u64)(usage - high) << MEMCG_DELAY_PRECISION_SHIFT,
clamped_high);

penalty_jiffies = ((u64)overage * overage * HZ)

0 comments on commit d397a45

Please sign in to comment.