From: Kirill Tkhai <ktkhai@odin.com>
To: <linux-kernel@vger.kernel.org>
Cc: Oleg Nesterov <oleg@redhat.com>,
Andrew Morton <akpm@linux-foundation.org>
Subject: [PATCH] exit: Clarify choice of new parent in forget_original_parent()
Date: Tue, 16 Jun 2015 12:49:54 +0300 [thread overview]
Message-ID: <1434448194.1711.1.camel@odin.com> (raw)
Second parameter of find_new_reaper() and the similarity of its name
and find_child_reaper()'s name confuse a reader.
Rename find_child_reaper() for better conformity of its name and its
function. Also delete the second parameter of find_new_reaper().
These both improve modularity.
Signed-off-by: Kirill Tkhai <ktkhai@odin.com>
Cc: Oleg Nesterov <oleg@redhat.com>
Cc: Andrew Morton <akpm@linux-foundation.org>
---
kernel/exit.c | 24 ++++++++++++++----------
1 file changed, 14 insertions(+), 10 deletions(-)
diff --git a/kernel/exit.c b/kernel/exit.c
index 22fcc05..ae60a4d 100644
--- a/kernel/exit.c
+++ b/kernel/exit.c
@@ -450,7 +450,7 @@ static struct task_struct *find_alive_thread(struct task_struct *p)
return NULL;
}
-static struct task_struct *find_child_reaper(struct task_struct *father)
+static void exit_pidns_child_reaper(struct task_struct *father)
__releases(&tasklist_lock)
__acquires(&tasklist_lock)
{
@@ -458,12 +458,12 @@ static struct task_struct *find_child_reaper(struct task_struct *father)
struct task_struct *reaper = pid_ns->child_reaper;
if (likely(reaper != father))
- return reaper;
+ return;
reaper = find_alive_thread(father);
if (reaper) {
pid_ns->child_reaper = reaper;
- return reaper;
+ return;
}
write_unlock_irq(&tasklist_lock);
@@ -473,8 +473,6 @@ static struct task_struct *find_child_reaper(struct task_struct *father)
}
zap_pid_ns_processes(pid_ns);
write_lock_irq(&tasklist_lock);
-
- return father;
}
/*
@@ -484,15 +482,21 @@ static struct task_struct *find_child_reaper(struct task_struct *father)
* child_subreaper for its children (like a service manager)
* 3. give it to the init process (PID 1) in our pid namespace
*/
-static struct task_struct *find_new_reaper(struct task_struct *father,
- struct task_struct *child_reaper)
+static struct task_struct *find_new_reaper(struct task_struct *father)
{
- struct task_struct *thread, *reaper;
+ struct task_struct *thread, *reaper, *child_reaper;
thread = find_alive_thread(father);
if (thread)
return thread;
+ child_reaper = task_active_pid_ns(father)->child_reaper;
+ /*
+ * child_reaper doesn't have children after zap_pid_ns_processes(),
+ * therefore it can't enter this function.
+ */
+ BUG_ON(child_reaper == father);
+
if (father->signal->has_child_subreaper) {
/*
* Find the first ->is_child_subreaper ancestor in our pid_ns.
@@ -557,11 +561,11 @@ static void forget_original_parent(struct task_struct *father,
exit_ptrace(father, dead);
/* Can drop and reacquire tasklist_lock */
- reaper = find_child_reaper(father);
+ exit_pidns_child_reaper(father);
if (list_empty(&father->children))
return;
- reaper = find_new_reaper(father, reaper);
+ reaper = find_new_reaper(father);
list_for_each_entry(p, &father->children, sibling) {
for_each_thread(p, t) {
t->real_parent = reaper;
next reply other threads:[~2015-06-16 9:50 UTC|newest]
Thread overview: 5+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-06-16 9:49 Kirill Tkhai [this message]
2015-06-16 19:27 ` [PATCH] exit: Clarify choice of new parent in forget_original_parent() Oleg Nesterov
2015-06-16 20:03 ` Oleg Nesterov
2015-06-17 17:24 ` Kirill Tkhai
2015-06-17 17:23 ` Kirill Tkhai
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=1434448194.1711.1.camel@odin.com \
--to=ktkhai@odin.com \
--cc=akpm@linux-foundation.org \
--cc=linux-kernel@vger.kernel.org \
--cc=oleg@redhat.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 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.