For both patches: Reviewed-by: Oleg Nesterov <oleg@xxxxxxxxxx> a minor nit below... On 04/11, Christian Brauner wrote: > > int pidfd_prepare(struct pid *pid, unsigned int flags, struct file **ret) > { > - int err = 0; > - > - if (!(flags & PIDFD_THREAD)) { > + scoped_guard(spinlock_irq, &pid->wait_pidfd.lock) { > + /* > + * If this wasn't a thread-group leader struct pid or > + * the task already been reaped report ESRCH to > + * userspace. > + */ > + if (!pid_has_task(pid, PIDTYPE_PID)) > + return -ESRCH; The "If this wasn't a thread-group leader struct pid" part of the comment looks a bit confusing to me, as if pid_has_task(PIDTYPE_PID) should return false in this case. OTOH, perhaps it makes sense to explain scoped_guard(wait_pidfd.lock)? Something like "see unhash_process -> wake_up_all(), detach_pid(TGID) isn't possible if pid_has_task(PID) succeeds". Oleg.