mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2026-01-12 01:20:14 +00:00
exit: move wake_up_all() pidfd waiters into __unhash_process()
Move the pidfd notification out of __change_pid() and into __unhash_process(). The only valid call to __change_pid() with a NULL argument and PIDTYPE_PID is from __unhash_process(). This is a lot more obvious than calling it from __change_pid(). Link: https://lore.kernel.org/20250411-work-pidfs-enoent-v2-1-60b2d3bb545f@kernel.org Reviewed-by: Oleg Nesterov <oleg@redhat.com> Signed-off-by: Christian Brauner <brauner@kernel.org>
This commit is contained in:
parent
1e940fff94
commit
35c9701ea7
@ -133,8 +133,13 @@ struct release_task_post {
|
||||
static void __unhash_process(struct release_task_post *post, struct task_struct *p,
|
||||
bool group_dead)
|
||||
{
|
||||
struct pid *pid = task_pid(p);
|
||||
|
||||
nr_threads--;
|
||||
|
||||
detach_pid(post->pids, p, PIDTYPE_PID);
|
||||
wake_up_all(&pid->wait_pidfd);
|
||||
|
||||
if (group_dead) {
|
||||
detach_pid(post->pids, p, PIDTYPE_TGID);
|
||||
detach_pid(post->pids, p, PIDTYPE_PGID);
|
||||
|
||||
@ -359,11 +359,6 @@ static void __change_pid(struct pid **pids, struct task_struct *task,
|
||||
hlist_del_rcu(&task->pid_links[type]);
|
||||
*pid_ptr = new;
|
||||
|
||||
if (type == PIDTYPE_PID) {
|
||||
WARN_ON_ONCE(pid_has_task(pid, PIDTYPE_PID));
|
||||
wake_up_all(&pid->wait_pidfd);
|
||||
}
|
||||
|
||||
for (tmp = PIDTYPE_MAX; --tmp >= 0; )
|
||||
if (pid_has_task(pid, tmp))
|
||||
return;
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user