Re: [PATCH] mm/oom_kill, proc: replace magic number 1000 with OOM_SCORE_ADJ_MAX
Song Hu <[email protected]>
| Newsgroups | org.kernel.vger.linux-kernel,org.kernel.vger.linux-fsdevel,org.kvack.linux-mm |
|---|---|
| Message-ID | <[email protected]> |
On 2026/8/11 11:36, Ye Liu wrote: > --- a/mm/oom_kill.c > +++ b/mm/oom_kill.c > @@ -230,7 +230,7 @@ long oom_badness(struct task_struct *p, unsigned long totalpages) > task_unlock(p); > > /* Normalize to oom_score_adj units */ > - adj *= totalpages / 1000; > + adj *= totalpages / OOM_SCORE_ADJ_MAX; One thing this line hides: for a memcg OOM, totalpages is mem_cgroup_get_max(), which can be below 1000 pages when the container limit is under 4M. The division then yields 0, the whole oom_score_adj contribution goes away, and a task protected with -997 scores the same as a best-effort task with 1000. The -1000 exemption is checked separately above and still works. DIV_ROUND_UP(totalpages, OOM_SCORE_ADJ_MAX) would preserve the adj weighting for small limits and change nothing meaningful for large ones. This is an edge case, so probably fine to leave as is - noting it here since the line is being touched anyway.