diff options
Diffstat (limited to 'mm')
-rw-r--r-- | mm/oom_kill.c | 14 |
1 files changed, 7 insertions, 7 deletions
diff --git a/mm/oom_kill.c b/mm/oom_kill.c index 5a3ba96c8338..10f686969fc4 100644 --- a/mm/oom_kill.c +++ b/mm/oom_kill.c | |||
@@ -902,13 +902,7 @@ static void oom_kill_process(struct oom_control *oc, const char *message) | |||
902 | continue; | 902 | continue; |
903 | if (same_thread_group(p, victim)) | 903 | if (same_thread_group(p, victim)) |
904 | continue; | 904 | continue; |
905 | if (unlikely(p->flags & PF_KTHREAD) || is_global_init(p)) { | 905 | if (is_global_init(p)) { |
906 | /* | ||
907 | * We cannot use oom_reaper for the mm shared by this | ||
908 | * process because it wouldn't get killed and so the | ||
909 | * memory might be still used. Hide the mm from the oom | ||
910 | * killer to guarantee OOM forward progress. | ||
911 | */ | ||
912 | can_oom_reap = false; | 906 | can_oom_reap = false; |
913 | set_bit(MMF_OOM_SKIP, &mm->flags); | 907 | set_bit(MMF_OOM_SKIP, &mm->flags); |
914 | pr_info("oom killer %d (%s) has mm pinned by %d (%s)\n", | 908 | 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) | |||
916 | task_pid_nr(p), p->comm); | 910 | task_pid_nr(p), p->comm); |
917 | continue; | 911 | continue; |
918 | } | 912 | } |
913 | /* | ||
914 | * No use_mm() user needs to read from the userspace so we are | ||
915 | * ok to reap it. | ||
916 | */ | ||
917 | if (unlikely(p->flags & PF_KTHREAD)) | ||
918 | continue; | ||
919 | do_send_sig_info(SIGKILL, SEND_SIG_FORCED, p, true); | 919 | do_send_sig_info(SIGKILL, SEND_SIG_FORCED, p, true); |
920 | } | 920 | } |
921 | rcu_read_unlock(); | 921 | rcu_read_unlock(); |