|
@@ -902,13 +902,7 @@ static void oom_kill_process(struct oom_control *oc, const char *message)
|
|
|
continue;
|
|
|
if (same_thread_group(p, victim))
|
|
|
continue;
|
|
|
- if (unlikely(p->flags & PF_KTHREAD) || is_global_init(p)) {
|
|
|
- /*
|
|
|
- * We cannot use oom_reaper for the mm shared by this
|
|
|
- * process because it wouldn't get killed and so the
|
|
|
- * memory might be still used. Hide the mm from the oom
|
|
|
- * killer to guarantee OOM forward progress.
|
|
|
- */
|
|
|
+ if (is_global_init(p)) {
|
|
|
can_oom_reap = false;
|
|
|
set_bit(MMF_OOM_SKIP, &mm->flags);
|
|
|
pr_info("oom killer %d (%s) has mm pinned by %d (%s)\n",
|
|
@@ -916,6 +910,12 @@ static void oom_kill_process(struct oom_control *oc, const char *message)
|
|
|
task_pid_nr(p), p->comm);
|
|
|
continue;
|
|
|
}
|
|
|
+ /*
|
|
|
+ * No use_mm() user needs to read from the userspace so we are
|
|
|
+ * ok to reap it.
|
|
|
+ */
|
|
|
+ if (unlikely(p->flags & PF_KTHREAD))
|
|
|
+ continue;
|
|
|
do_send_sig_info(SIGKILL, SEND_SIG_FORCED, p, true);
|
|
|
}
|
|
|
rcu_read_unlock();
|