Hi, Olge: This is really a good idea given that "parent" is declared as RCU-protected. Just a bit odd, though, that the "parent" has not been accessed this way in the code base. So just to confirm: the revised code would look like the following: static void do_notify_parent_predump(void) { struct task_struct *parent; int sig; rcu_read_lock(); parent = rcu_dereference(current->parent); sig = parent->signal->predump_signal; if (sig != 0) do_send_sig_info(sig, SEND_SIG_NOINFO, parent, PIDTYPE_TGID); rcu_read_unlock(); } Thank you so much for your help during this review. I would like to ack your contribution in the "Reviewed-by:" field. -- Enke On 10/26/18 1:28 AM, Oleg Nesterov wrote: > On 10/25, Enke Chen wrote: >> >> +static void do_notify_parent_predump(void) >> +{ >> + struct task_struct *parent; >> + int sig; >> + >> + read_lock(&tasklist_lock); >> + parent = current->parent; >> + sig = parent->signal->predump_signal; >> + if (sig != 0) >> + do_send_sig_info(sig, SEND_SIG_NOINFO, parent, PIDTYPE_TGID); >> + read_unlock(&tasklist_lock); > > Ah. It is strange I didn't think about this before... Please, do not take > tasklist_lock, use rcu_read_lock() instead. do_send_sig_info() uses the > rcu-friendly lock_task_sighand(), so rcu_dereference(parent) should work > fine. > > Oleg. >