|
@@ -1841,13 +1841,18 @@ static void mem_cgroup_out_of_memory(struct mem_cgroup *memcg, gfp_t gfp_mask,
|
|
|
break;
|
|
|
};
|
|
|
points = oom_badness(task, memcg, NULL, totalpages);
|
|
|
- if (points > chosen_points) {
|
|
|
- if (chosen)
|
|
|
- put_task_struct(chosen);
|
|
|
- chosen = task;
|
|
|
- chosen_points = points;
|
|
|
- get_task_struct(chosen);
|
|
|
- }
|
|
|
+ if (!points || points < chosen_points)
|
|
|
+ continue;
|
|
|
+ /* Prefer thread group leaders for display purposes */
|
|
|
+ if (points == chosen_points &&
|
|
|
+ thread_group_leader(chosen))
|
|
|
+ continue;
|
|
|
+
|
|
|
+ if (chosen)
|
|
|
+ put_task_struct(chosen);
|
|
|
+ chosen = task;
|
|
|
+ chosen_points = points;
|
|
|
+ get_task_struct(chosen);
|
|
|
}
|
|
|
css_task_iter_end(&it);
|
|
|
}
|