From: ebiederm@xmission.com (Eric W. Biederman)
To: Oleg Nesterov <oleg@tv-sign.ru>
Cc: Andrew Morton <akpm@linux-foundation.org>,
Davide Libenzi <davidel@xmailserver.org>,
Ingo Molnar <mingo@elte.hu>,
Linus Torvalds <torvalds@linux-foundation.org>,
"Rafael J. Wysocki" <rjw@sisk.pl>,
Roland McGrath <roland@redhat.com>,
Rusty Russell <rusty@rustcorp.com.au>,
linux-kernel@vger.kernel.org, linux-arch@vger.kernel.org
Subject: Re: [PATCH] kthread: Enhance kthread_stop to abort interruptible sleeps
Date: Tue, 24 Apr 2007 11:18:27 -0600 [thread overview]
Message-ID: <m1irblu1wc.fsf@ebiederm.dsl.xmission.com> (raw)
In-Reply-To: <20070424155332.GA321@tv-sign.ru> (Oleg Nesterov's message of "Tue, 24 Apr 2007 19:53:32 +0400")
Oleg Nesterov <oleg@tv-sign.ru> writes:
> On 04/24, Oleg Nesterov wrote:
>>
>> Hm, mm_release() clears ->vfork_done before complete().
Duh. Yes somehow I had a blind spot there. I clearly
need to handle that case.
>> mm_release:
>>
>> struct completion *vfork_done = tsk->vfork_done;
>>
>> if (vfork_done) {
>> tsk->vfork_done = NULL;
>> complete(vfork_done);
>> }
>>
>>
>> kthread_stop:
>>
>> set_tsk_thread_flag(tsk, TIF_KTHREAD_STOP);
>> signal_wake_up(tsk, 1);
>>
>> // tsk exits, sets ->vfork_done == NULL
>>
>> wait_for_completion(tsk->vfork_done);
>
> Since the task_struct should be pinned anyway, I think kthread_stop()
> should do:
>
> vfork_done = tsk->vfork_done;
> barrier();
> if (vfork_done)
> wait_for_completion(vfork_done);
That should work, and this may explain what is going on. I was trying
to figure out how this could happen but if the thread is running on
another cpu there is a race and it may exit quickly enough to cause us
problems before we get to kthread_stop.
I don't know if this is the problem but it certainly needs to be fixed.
Eric
next prev parent reply other threads:[~2007-04-24 17:20 UTC|newest]
Thread overview: 25+ messages / expand[flat|nested] mbox.gz Atom feed top
2007-04-13 13:02 [PATCH 3/3] make kthread_stop() scalable Oleg Nesterov
2007-04-13 23:44 ` Eric W. Biederman
2007-04-14 18:02 ` Oleg Nesterov
2007-04-14 18:34 ` Eric W. Biederman
2007-04-14 18:50 ` Oleg Nesterov
2007-04-14 3:13 ` [PATCH] kthread: Enhance kthread_stop to abort interruptible sleeps Eric W. Biederman
2007-04-14 3:13 ` Eric W. Biederman
2007-04-14 3:17 ` [PATCH] kthread: Simplify kthread_create Eric W. Biederman
2007-04-14 3:17 ` Eric W. Biederman
2007-04-14 18:35 ` [PATCH] kthread: Enhance kthread_stop to abort interruptible sleeps Oleg Nesterov
2007-04-14 19:04 ` Eric W. Biederman
2007-04-14 19:34 ` Oleg Nesterov
2007-04-24 10:09 ` Andrew Morton
2007-04-24 10:09 ` Andrew Morton
2007-04-24 10:30 ` Eric W. Biederman
2007-04-24 10:30 ` Eric W. Biederman
2007-04-24 10:42 ` Andrew Morton
2007-04-24 10:42 ` Andrew Morton
2007-04-24 11:11 ` Eric W. Biederman
2007-04-24 11:11 ` Eric W. Biederman
2007-04-24 15:05 ` Oleg Nesterov
2007-04-24 15:53 ` Oleg Nesterov
2007-04-24 17:18 ` Eric W. Biederman [this message]
2007-04-24 20:27 ` Oleg Nesterov
2007-04-24 21:19 ` Eric W. Biederman
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=m1irblu1wc.fsf@ebiederm.dsl.xmission.com \
--to=ebiederm@xmission.com \
--cc=akpm@linux-foundation.org \
--cc=davidel@xmailserver.org \
--cc=linux-arch@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=mingo@elte.hu \
--cc=oleg@tv-sign.ru \
--cc=rjw@sisk.pl \
--cc=roland@redhat.com \
--cc=rusty@rustcorp.com.au \
--cc=torvalds@linux-foundation.org \
/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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.