From: Frederic Weisbecker <fweisbec@gmail.com>
To: Oleg Nesterov <oleg@redhat.com>
Cc: Andrew Morton <akpm@linux-foundation.org>,
Rik van Riel <riel@redhat.com>, Christoph Lameter <cl@linux.com>,
Tejun Heo <tj@kernel.org>, Rusty Russell <rusty@rustcorp.com.au>,
linux-kernel@vger.kernel.org
Subject: Re: [PATCH 0/1] kmod: don't run async usermode helper as a child of kworker thread
Date: Thu, 15 Oct 2015 17:52:56 +0200 [thread overview]
Message-ID: <20151015155255.GE12822@lerouge> (raw)
In-Reply-To: <20151015143757.GB20060@redhat.com>
On Thu, Oct 15, 2015 at 04:37:57PM +0200, Oleg Nesterov wrote:
> call_usermodehelper_exec_sync() does fork() + wait() with "unignored"
> SIGCHLD. What we have missed is that this worker thread can have other
> children previously forked by call_usermodehelper_exec_work() without
> UMH_WAIT_PROC. If such a child exits in between it becomes a zombie and
> nobody can reap it (unless/until this worker thread exits too).
I think we should elaborate a tiny bit the last sentence here:
"When the parent masks SIGCHLD, a child autoreaps itself, this is
what we expect from !UMH_WAIT_PROC children. Now if such a child exits during
this unlucky window where the parent worker enabled SIGCHLD to wait for a sibling,
the autoreap will fail and the child then becomes a zombie because nobody can reap it
(unless/until this worker thread exits too)."
>
> Change the !UMH_WAIT_PROC case to use CLONE_PARENT.
>
> Note: this is only first step. All PF_KTHREAD tasks, even created by
> kernel_thread() should have ->parent == kthreadd by default.
>
> Signed-off-by: Oleg Nesterov <oleg@redhat.com>
> ---
> kernel/kmod.c | 8 ++++++--
> 1 file changed, 6 insertions(+), 2 deletions(-)
>
> diff --git a/kernel/kmod.c b/kernel/kmod.c
> index da98d05..e7185a2 100644
> --- a/kernel/kmod.c
> +++ b/kernel/kmod.c
> @@ -327,9 +327,13 @@ static void call_usermodehelper_exec_work(struct work_struct *work)
> call_usermodehelper_exec_sync(sub_info);
> } else {
> pid_t pid;
> -
> + /*
> + * Use CLONE_PARENT to reparent it to kthreadd; we do not
> + * want to pollute current->children, in particular because
> + * call_usermodehelper_exec_sync() assumes it is empty.
> + */
IMHO, that too should get some more details. Maybe:
+ /*
+ * Use CLONE_PARENT to reparent it to kthreadd. We need a parent
+ * that always ignore SIGCHLD such that the child always autoreaps
+ * as expected.
+ */
Thanks!
> pid = kernel_thread(call_usermodehelper_exec_async, sub_info,
> - SIGCHLD);
> + CLONE_PARENT | SIGCHLD);
> if (pid < 0) {
> sub_info->retval = pid;
> umh_complete(sub_info);
> --
> 2.4.3
>
>
next prev parent reply other threads:[~2015-10-15 15:53 UTC|newest]
Thread overview: 12+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-10-14 18:51 [PATCH 0/1] Revert "kmod: handle UMH_WAIT_PROC from system unbound workqueue" Oleg Nesterov
2015-10-14 18:52 ` [PATCH 1/1] " Oleg Nesterov
2015-10-15 13:37 ` Frederic Weisbecker
2015-10-15 15:18 ` Oleg Nesterov
2015-10-15 15:34 ` Frederic Weisbecker
2015-10-15 14:37 ` [PATCH 0/1] kmod: don't run async usermode helper as a child of kworker thread Oleg Nesterov
2015-10-15 14:37 ` Oleg Nesterov
2015-10-15 15:52 ` Frederic Weisbecker [this message]
2015-10-15 16:32 ` Oleg Nesterov
2015-10-15 16:53 ` Frederic Weisbecker
2015-10-15 17:51 ` Oleg Nesterov
2015-10-15 17:52 ` [PATCH v2 1/1] " Oleg Nesterov
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=20151015155255.GE12822@lerouge \
--to=fweisbec@gmail.com \
--cc=akpm@linux-foundation.org \
--cc=cl@linux.com \
--cc=linux-kernel@vger.kernel.org \
--cc=oleg@redhat.com \
--cc=riel@redhat.com \
--cc=rusty@rustcorp.com.au \
--cc=tj@kernel.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.