Hi Michal, I love your patch! Perhaps something to improve: [auto build test WARNING on linus/master] [also build test WARNING on v5.0-rc1 next-20190108] [if your patch is applied to the wrong git tree, please drop us a note to help improve the system] url: https://github.com/0day-ci/linux/commits/Michal-Hocko/oom-memcg-do-not-report-racy-no-eligible-OOM/20190108-092805 config: x86_64-allmodconfig (attached as .config) compiler: gcc-7 (Debian 7.3.0-1) 7.3.0 reproduce: # save the attached .config to linux build tree make ARCH=x86_64 All warnings (new ones prefixed by >>): include/linux/rcupdate.h:659:9: warning: context imbalance in 'find_lock_task_mm' - wrong count at exit include/linux/sched/mm.h:141:37: warning: dereference of noderef expression mm/oom_kill.c:225:28: warning: context imbalance in 'oom_badness' - unexpected unlock mm/oom_kill.c:406:9: warning: context imbalance in 'dump_tasks' - different lock contexts for basic block >> mm/oom_kill.c:918:17: warning: context imbalance in '__oom_kill_process' - unexpected unlock vim +/__oom_kill_process +918 mm/oom_kill.c 1af8bb43 Michal Hocko 2016-07-28 845 5989ad7b Roman Gushchin 2018-08-21 846 static void __oom_kill_process(struct task_struct *victim) ^1da177e Linus Torvalds 2005-04-16 847 { 5989ad7b Roman Gushchin 2018-08-21 848 struct task_struct *p; 647f2bdf David Rientjes 2012-03-21 849 struct mm_struct *mm; bb29902a Tetsuo Handa 2016-03-25 850 bool can_oom_reap = true; ^1da177e Linus Torvalds 2005-04-16 851 6b0c81b3 David Rientjes 2012-07-31 852 p = find_lock_task_mm(victim); 6b0c81b3 David Rientjes 2012-07-31 853 if (!p) { 6b0c81b3 David Rientjes 2012-07-31 854 put_task_struct(victim); 647f2bdf David Rientjes 2012-03-21 855 return; 6b0c81b3 David Rientjes 2012-07-31 856 } else if (victim != p) { 6b0c81b3 David Rientjes 2012-07-31 857 get_task_struct(p); 6b0c81b3 David Rientjes 2012-07-31 858 put_task_struct(victim); 6b0c81b3 David Rientjes 2012-07-31 859 victim = p; 6b0c81b3 David Rientjes 2012-07-31 860 } 647f2bdf David Rientjes 2012-03-21 861 880b7689 Tetsuo Handa 2015-11-05 862 /* Get a reference to safely compare mm after task_unlock(victim) */ 647f2bdf David Rientjes 2012-03-21 863 mm = victim->mm; f1f10076 Vegard Nossum 2017-02-27 864 mmgrab(mm); 8e675f7a Konstantin Khlebnikov 2017-07-06 865 8e675f7a Konstantin Khlebnikov 2017-07-06 866 /* Raise event before sending signal: task reaper must see this */ 8e675f7a Konstantin Khlebnikov 2017-07-06 867 count_vm_event(OOM_KILL); fe6bdfc8 Roman Gushchin 2018-06-14 868 memcg_memory_event_mm(mm, MEMCG_OOM_KILL); 8e675f7a Konstantin Khlebnikov 2017-07-06 869 426fb5e7 Tetsuo Handa 2015-11-05 870 /* cd04ae1e Michal Hocko 2017-09-06 871 * We should send SIGKILL before granting access to memory reserves cd04ae1e Michal Hocko 2017-09-06 872 * in order to prevent the OOM victim from depleting the memory cd04ae1e Michal Hocko 2017-09-06 873 * reserves from the user space under its control. 426fb5e7 Tetsuo Handa 2015-11-05 874 */ 079b22dc Eric W. Biederman 2018-09-03 875 do_send_sig_info(SIGKILL, SEND_SIG_PRIV, victim, PIDTYPE_TGID); 16e95196 Johannes Weiner 2015-06-24 876 mark_oom_victim(victim); eca56ff9 Jerome Marchand 2016-01-14 877 pr_err("Killed process %d (%s) total-vm:%lukB, anon-rss:%lukB, file-rss:%lukB, shmem-rss:%lukB\n", 647f2bdf David Rientjes 2012-03-21 878 task_pid_nr(victim), victim->comm, K(victim->mm->total_vm), 647f2bdf David Rientjes 2012-03-21 879 K(get_mm_counter(victim->mm, MM_ANONPAGES)), eca56ff9 Jerome Marchand 2016-01-14 880 K(get_mm_counter(victim->mm, MM_FILEPAGES)), eca56ff9 Jerome Marchand 2016-01-14 881 K(get_mm_counter(victim->mm, MM_SHMEMPAGES))); 647f2bdf David Rientjes 2012-03-21 882 task_unlock(victim); 647f2bdf David Rientjes 2012-03-21 883 647f2bdf David Rientjes 2012-03-21 884 /* 647f2bdf David Rientjes 2012-03-21 885 * Kill all user processes sharing victim->mm in other thread groups, if 647f2bdf David Rientjes 2012-03-21 886 * any. They don't get access to memory reserves, though, to avoid 647f2bdf David Rientjes 2012-03-21 887 * depletion of all memory. This prevents mm->mmap_sem livelock when an 647f2bdf David Rientjes 2012-03-21 888 * oom killed thread cannot exit because it requires the semaphore and 647f2bdf David Rientjes 2012-03-21 889 * its contended by another thread trying to allocate memory itself. 647f2bdf David Rientjes 2012-03-21 890 * That thread will now get access to memory reserves since it has a 647f2bdf David Rientjes 2012-03-21 891 * pending fatal signal. 647f2bdf David Rientjes 2012-03-21 892 */ 4d4048be Oleg Nesterov 2014-01-21 893 rcu_read_lock(); c319025a Oleg Nesterov 2015-11-05 894 for_each_process(p) { 00508538 Michal Hocko 2019-01-07 895 struct task_struct *t; 4d7b3394 Oleg Nesterov 2015-11-05 896 if (!process_shares_mm(p, mm)) c319025a Oleg Nesterov 2015-11-05 897 continue; c319025a Oleg Nesterov 2015-11-05 898 if (same_thread_group(p, victim)) c319025a Oleg Nesterov 2015-11-05 899 continue; 1b51e65e Michal Hocko 2016-10-07 900 if (is_global_init(p)) { aac45363 Michal Hocko 2016-03-25 901 can_oom_reap = false; 862e3073 Michal Hocko 2016-10-07 902 set_bit(MMF_OOM_SKIP, &mm->flags); a373966d Michal Hocko 2016-07-28 903 pr_info("oom killer %d (%s) has mm pinned by %d (%s)\n", a373966d Michal Hocko 2016-07-28 904 task_pid_nr(victim), victim->comm, a373966d Michal Hocko 2016-07-28 905 task_pid_nr(p), p->comm); 647f2bdf David Rientjes 2012-03-21 906 continue; aac45363 Michal Hocko 2016-03-25 907 } 1b51e65e Michal Hocko 2016-10-07 908 /* 1b51e65e Michal Hocko 2016-10-07 909 * No use_mm() user needs to read from the userspace so we are 1b51e65e Michal Hocko 2016-10-07 910 * ok to reap it. 1b51e65e Michal Hocko 2016-10-07 911 */ 1b51e65e Michal Hocko 2016-10-07 912 if (unlikely(p->flags & PF_KTHREAD)) 1b51e65e Michal Hocko 2016-10-07 913 continue; 079b22dc Eric W. Biederman 2018-09-03 914 do_send_sig_info(SIGKILL, SEND_SIG_PRIV, p, PIDTYPE_TGID); 00508538 Michal Hocko 2019-01-07 915 t = find_lock_task_mm(p); 00508538 Michal Hocko 2019-01-07 916 if (!t) 00508538 Michal Hocko 2019-01-07 917 continue; 00508538 Michal Hocko 2019-01-07 @918 mark_oom_victim(t); 00508538 Michal Hocko 2019-01-07 919 task_unlock(t); 647f2bdf David Rientjes 2012-03-21 920 } 6b0c81b3 David Rientjes 2012-07-31 921 rcu_read_unlock(); 647f2bdf David Rientjes 2012-03-21 922 aac45363 Michal Hocko 2016-03-25 923 if (can_oom_reap) 36324a99 Michal Hocko 2016-03-25 924 wake_oom_reaper(victim); aac45363 Michal Hocko 2016-03-25 925 880b7689 Tetsuo Handa 2015-11-05 926 mmdrop(mm); 6b0c81b3 David Rientjes 2012-07-31 927 put_task_struct(victim); ^1da177e Linus Torvalds 2005-04-16 928 } 647f2bdf David Rientjes 2012-03-21 929 #undef K ^1da177e Linus Torvalds 2005-04-16 930 :::::: The code at line 918 was first introduced by commit :::::: 00508538cb045f28a2f60e5d2dff98b77b0da725 mm, oom: marks all killed tasks as oom victims :::::: TO: Michal Hocko :::::: CC: 0day robot --- 0-DAY kernel test infrastructure Open Source Technology Center https://lists.01.org/pipermail/kbuild-all Intel Corporation