diff options
Diffstat (limited to 'mm/memcontrol.c')
-rw-r--r-- | mm/memcontrol.c | 19 |
1 files changed, 12 insertions, 7 deletions
diff --git a/mm/memcontrol.c b/mm/memcontrol.c index 9537e1389ee6..c8336e8f8df0 100644 --- a/mm/memcontrol.c +++ b/mm/memcontrol.c | |||
@@ -1841,13 +1841,18 @@ static void mem_cgroup_out_of_memory(struct mem_cgroup *memcg, gfp_t gfp_mask, | |||
1841 | break; | 1841 | break; |
1842 | }; | 1842 | }; |
1843 | points = oom_badness(task, memcg, NULL, totalpages); | 1843 | points = oom_badness(task, memcg, NULL, totalpages); |
1844 | if (points > chosen_points) { | 1844 | if (!points || points < chosen_points) |
1845 | if (chosen) | 1845 | continue; |
1846 | put_task_struct(chosen); | 1846 | /* Prefer thread group leaders for display purposes */ |
1847 | chosen = task; | 1847 | if (points == chosen_points && |
1848 | chosen_points = points; | 1848 | thread_group_leader(chosen)) |
1849 | get_task_struct(chosen); | 1849 | continue; |
1850 | } | 1850 | |
1851 | if (chosen) | ||
1852 | put_task_struct(chosen); | ||
1853 | chosen = task; | ||
1854 | chosen_points = points; | ||
1855 | get_task_struct(chosen); | ||
1851 | } | 1856 | } |
1852 | css_task_iter_end(&it); | 1857 | css_task_iter_end(&it); |
1853 | } | 1858 | } |