linux-mm.kvack.org archive mirror
 help / color / mirror / Atom feed
From: ebiederm@xmission.com (Eric W. Biederman)
To: Oleg Nesterov <oleg@redhat.com>
Cc: Michal Hocko <mhocko@suse.com>,
	 Suren Baghdasaryan <surenb@google.com>,
	 christian.brauner@ubuntu.com,  mingo@kernel.org,
	 peterz@infradead.org,  tglx@linutronix.de,  esyr@redhat.com,
	 christian@kellner.me,  areber@redhat.com,  shakeelb@google.com,
	 cyphar@cyphar.com,  adobriyan@gmail.com,
	 akpm@linux-foundation.org,  gladkov.alexey@gmail.com,
	 walken@google.com,  daniel.m.jordan@oracle.com,
	 avagin@gmail.com,  bernd.edlinger@hotmail.de,
	 john.johansen@canonical.com,  laoar.shao@gmail.com,
	 timmurray@google.com,  minchan@kernel.org,
	 kernel-team@android.com,  linux-kernel@vger.kernel.org,
	 linux-fsdevel@vger.kernel.org,  linux-mm@kvack.org
Subject: Re: [PATCH 1/1] mm, oom_adj: don't loop through tasks in __set_oom_adj when not necessary
Date: Thu, 20 Aug 2020 10:06:11 -0500	[thread overview]
Message-ID: <874koxuzks.fsf@x220.int.ebiederm.org> (raw)
In-Reply-To: <20200820143626.GD4546@redhat.com> (Oleg Nesterov's message of "Thu, 20 Aug 2020 16:36:27 +0200")

Oleg Nesterov <oleg@redhat.com> writes:

> On 08/20, Oleg Nesterov wrote:
>>
>> On 08/20, Eric W. Biederman wrote:
>> >
>> > --- a/fs/exec.c
>> > +++ b/fs/exec.c
>> > @@ -1139,6 +1139,10 @@ static int exec_mmap(struct mm_struct *mm)
>> >  	vmacache_flush(tsk);
>> >  	task_unlock(tsk);
>> >  	if (old_mm) {
>> > +		mm->oom_score_adj = old_mm->oom_score_adj;
>> > +		mm->oom_score_adj_min = old_mm->oom_score_adj_min;
>> > +		if (tsk->vfork_done)
>> > +			mm->oom_score_adj = tsk->vfork_oom_score_adj;
>>
>> too late, ->vfork_done is NULL after mm_release().
>>
>> And this can race with __set_oom_adj(). Yes, the current code is racy too,
>> but this change adds another race, __set_oom_adj() could already observe
>> ->mm != NULL and update mm->oom_score_adj.
>   ^^^^^^^^^^^^
>
> I meant ->mm == new_mm.
>
> And another problem. Suppose we have
>
> 	if (!vfork()) {
> 		change_oom_score();
> 		exec();
> 	}
>
> the parent can be killed before the child execs, in this case vfork_oom_score_adj
> will be lost.

Yes.

Looking at include/uapi/linux/oom.h it appears that there are a lot of
oom_score_adj values that are reserved.  So it should be completely
possible to initialize vfork_oom_score_adj to -32768 aka SHRT_MIN, and
use that as a flag to see if it is active or not.

Likewise for vfork_oom_score_adj_min if we need to duplicate that one as
well.


That deals with that entire class of race.  We still have races during
exec about vfork_done being cleared before the new ->mm == new_mm.
While that is worth fixing is an independent issue.  

Eric



  reply	other threads:[~2020-08-20 15:10 UTC|newest]

Thread overview: 47+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-08-20  0:20 Suren Baghdasaryan
2020-08-20  5:56 ` Michal Hocko
2020-08-20  8:46 ` Christian Brauner
2020-08-20  9:09   ` Michal Hocko
2020-08-20 10:32     ` Christian Brauner
2020-08-20 11:14       ` Michal Hocko
2020-08-20 10:55 ` Oleg Nesterov
2020-08-20 11:13   ` Michal Hocko
2020-08-20 11:29     ` Michal Hocko
2020-08-20 11:41       ` Oleg Nesterov
2020-08-20 11:47       ` Christian Brauner
2020-08-20 11:30     ` Christian Brauner
2020-08-20 11:42       ` Michal Hocko
2020-08-20 12:41         ` Michal Hocko
2020-08-20 13:43           ` Christian Brauner
2020-08-20 12:34 ` Eric W. Biederman
2020-08-20 12:42   ` Michal Hocko
2020-08-20 12:45     ` Eric W. Biederman
2020-08-20 12:54       ` Eric W. Biederman
2020-08-20 13:26         ` Michal Hocko
2020-08-20 13:34           ` Christian Brauner
     [not found]             ` <dcb62b67-5ad6-f63a-a909-e2fa70b240fc@i-love.sakura.ne.jp>
2020-08-20 14:00               ` Christian Brauner
2020-08-20 14:15                 ` Michal Hocko
     [not found]                   ` <42d5645e-0364-c8cd-01dc-93a9aaff5b09@i-love.sakura.ne.jp>
2020-08-20 14:34                     ` Michal Hocko
     [not found]                 ` <637ab0e7-e686-0c94-753b-b97d24bb8232@i-love.sakura.ne.jp>
2020-08-20 14:49                   ` Eric W. Biederman
2020-08-20 15:06                     ` Christian Brauner
2020-08-20 15:56                     ` Suren Baghdasaryan
2020-08-20 16:26                       ` Michal Hocko
2020-08-20 16:29                         ` Christian Brauner
2020-08-20 16:47                           ` Suren Baghdasaryan
2020-08-21  4:39                         ` Eric W. Biederman
2020-08-21  7:17                           ` Michal Hocko
2020-08-21 11:15                           ` Oleg Nesterov
2020-08-21 15:28                             ` Suren Baghdasaryan
2020-08-21 16:06                               ` Suren Baghdasaryan
2020-08-21 16:37                                 ` Oleg Nesterov
2020-08-21 17:22                                   ` Suren Baghdasaryan
2020-08-21 16:33                               ` Oleg Nesterov
2020-08-21 17:59                                 ` Oleg Nesterov
2020-08-21 18:53                                   ` Suren Baghdasaryan
2020-08-24 20:03                                     ` Suren Baghdasaryan
2020-08-20 13:41           ` Eric W. Biederman
2020-08-20 14:04             ` Oleg Nesterov
2020-08-20 14:36               ` Oleg Nesterov
2020-08-20 15:06                 ` Eric W. Biederman [this message]
2020-08-20 14:43               ` Eric W. Biederman
2020-08-20 14:12             ` Michal Hocko

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=874koxuzks.fsf@x220.int.ebiederm.org \
    --to=ebiederm@xmission.com \
    --cc=adobriyan@gmail.com \
    --cc=akpm@linux-foundation.org \
    --cc=areber@redhat.com \
    --cc=avagin@gmail.com \
    --cc=bernd.edlinger@hotmail.de \
    --cc=christian.brauner@ubuntu.com \
    --cc=christian@kellner.me \
    --cc=cyphar@cyphar.com \
    --cc=daniel.m.jordan@oracle.com \
    --cc=esyr@redhat.com \
    --cc=gladkov.alexey@gmail.com \
    --cc=john.johansen@canonical.com \
    --cc=kernel-team@android.com \
    --cc=laoar.shao@gmail.com \
    --cc=linux-fsdevel@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-mm@kvack.org \
    --cc=mhocko@suse.com \
    --cc=minchan@kernel.org \
    --cc=mingo@kernel.org \
    --cc=oleg@redhat.com \
    --cc=peterz@infradead.org \
    --cc=shakeelb@google.com \
    --cc=surenb@google.com \
    --cc=tglx@linutronix.de \
    --cc=timmurray@google.com \
    --cc=walken@google.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox