On 01/30/2017 03:51 PM, Oleg Nesterov wrote:
On 01/27, Pavel Tikhomirov wrote:

--- a/include/linux/sched.h
+++ b/include/linux/sched.h
@@ -1725,6 +1725,8 @@ struct task_struct {
        struct signal_struct *signal;
        struct sighand_struct *sighand;

+       struct list_head csr_descendant;
+

You forgot to remove this part ;)

Oh, sure.


--- a/kernel/fork.c
+++ b/kernel/fork.c
@@ -1367,9 +1367,6 @@ static int copy_signal(unsigned long clone_flags, struct 
task_struct *tsk)
        sig->oom_score_adj = current->signal->oom_score_adj;
        sig->oom_score_adj_min = current->signal->oom_score_adj_min;

-       sig->has_child_subreaper = current->signal->has_child_subreaper ||
-                                  current->signal->is_child_subreaper;
-
        mutex_init(&sig->cred_guard_mutex);

        return 0;
@@ -1800,6 +1797,13 @@ static __latent_entropy struct task_struct *copy_process(

                        p->signal->leader_pid = pid;
                        p->signal->tty = tty_kref_get(current->signal->tty);
+                       /*
+                        * Inherit has_child_subreaper flag under the same
+                        * tasklist_lock with adding child to the process tree
+                        * for propagate_has_child_subreaper optimization.
+                        */
+                       p->signal->has_child_subreaper = 
current->signal->has_child_subreaper ||
+                                                        
current->signal->is_child_subreaper;

Ah yes, we need this change too...

And perhaps it would be more correct to do

                        p->signal->has_child_subreaper =
                                p->real_parent->signal->has_child_subreaper ||
                                p->real_parent->signal->is_child_subreaper;

the current code is not exactly right if CLONE_PARENT...

I'm fine with inheriting 'has' flag from real_parent, because if real_parent does not have 'has' flag set but parent has 'has' set, we inherited the flag in vain.

But I don't actually think that inheritance from parent not real_parent breaks my optimization: if real_parent has the flag, so does the parent.


Oleg.


--
Best regards, Tikhomirov Pavel
Software Developer, Virtuozzo.

Reply via email to