From b9b45822927d41df139d787635d5355c01aaa32a Mon Sep 17 00:00:00 2001 From: Suren Baghdasaryan Date: Tue, 23 Feb 2021 12:11:51 -0800 Subject: [PATCH] ANDROID: mm, oom: Prevent extra put_task when oom_evaluate_task is aborted The previous fix for the oom_evaluate_task abort case leads to an extra put_task_struct call on oc->chosen_non_negative_adj. Fix this by resetting oc->chosen_non_negative_adj and avoiding the whole negative ADJ logic altogether. Fixes: aef918d19a89 ("ANDROID: mm, oom: Fix select_bad_process customization") Bug: 180947519 Signed-off-by: Suren Baghdasaryan Change-Id: I5d649baac17daf1778a198be354823aa0b6a55b4 --- mm/oom_kill.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/mm/oom_kill.c b/mm/oom_kill.c index b8e669567d9c..9072352545aa 100644 --- a/mm/oom_kill.c +++ b/mm/oom_kill.c @@ -372,6 +372,7 @@ abort: put_task_struct(oc->chosen_non_negative_adj); if (oc->chosen) put_task_struct(oc->chosen); + oc->chosen_non_negative_adj = NULL; oc->chosen = (void *)-1UL; return 1; } @@ -404,8 +405,7 @@ static void select_bad_process(struct oom_control *oc) * a postive ADJ to kill, kill the task with the positive ADJ * instead. */ - if (oc->chosen && oc->chosen != (void *)-1UL && - oc->chosen->signal->oom_score_adj < 0) { + if (oc->chosen && oc->chosen->signal->oom_score_adj < 0) { put_task_struct(oc->chosen); oc->chosen = oc->chosen_non_negative_adj; oc->chosen_points = oc->chosen_non_negative_adj_points;