• Oleg Nesterov's avatar
    exit: exit_notify() can trust signal->notify_count < 0 · 9c339168
    Oleg Nesterov authored
    signal_struct->count in its current form must die.
    
    - it has no reasons to be atomic_t
    
    - it looks like a reference counter, but it is not
    
    - otoh, we really need to make task->signal refcountable, just look at
      the extremely ugly task_rq_unlock_wait() called from __exit_signals().
    
    - we should change the lifetime rules for task->signal, it should be
      pinned to task_struct.  We have a lot of code which can be simplified
      after that.
    
    - it is not needed!  while the code is correct, any usage of this
      counter is artificial, except fs/proc uses it correctly to show the
      number of threads.
    
    This series removes the usage of sig->count from exit pathes.
    
    This patch:
    
    Now that Veaceslav changed copy_signal() to use zalloc(), exit_notify()
    can just check notify_count < 0 to ensure the execing sub-threads needs
    the notification from us.  No need to do other checks, notify_count != 0
    must always mean ->group_exit_task != NULL is waiting for us.
    Signed-off-by: default avatarOleg Nesterov <oleg@redhat.com>
    Acked-by: default avatarRoland McGrath <roland@redhat.com>
    Cc: Veaceslav Falico <vfalico@redhat.com>
    Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
    Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
    9c339168
exit.c 43.8 KB