* [PATCH] pidfd: change do_notify_pidfd() to use __wake_up(poll_to_key(EPOLLIN))
@ 2024-02-05 14:13 Oleg Nesterov
2024-02-06 12:53 ` Christian Brauner
2024-02-06 17:03 ` Tycho Andersen
0 siblings, 2 replies; 7+ messages in thread
From: Oleg Nesterov @ 2024-02-05 14:13 UTC (permalink / raw)
To: Christian Brauner
Cc: Andy Lutomirski, Eric W. Biederman, Tycho Andersen, linux-kernel
rather than wake_up_all(). This way do_notify_pidfd() won't wakeup the
POLLHUP-only waiters which wait for pid_task() == NULL.
TODO:
- as Christian pointed out, this asks for the new wake_up_all_poll()
helper, it can already have other users.
- we can probably discriminate the PIDFD_THREAD and non-PIDFD_THREAD
waiters, but this needs more work. See
https://lore.kernel.org/all/20240205140848.GA15853@redhat.com/
Signed-off-by: Oleg Nesterov <oleg@redhat.com>
---
kernel/signal.c | 7 ++++---
1 file changed, 4 insertions(+), 3 deletions(-)
diff --git a/kernel/signal.c b/kernel/signal.c
index 9b40109f0c56..c3fac06937e2 100644
--- a/kernel/signal.c
+++ b/kernel/signal.c
@@ -2021,11 +2021,12 @@ int send_sigqueue(struct sigqueue *q, struct pid *pid, enum pid_type type)
void do_notify_pidfd(struct task_struct *task)
{
- struct pid *pid;
+ struct pid *pid = task_pid(task);
WARN_ON(task->exit_state == 0);
- pid = task_pid(task);
- wake_up_all(&pid->wait_pidfd);
+
+ __wake_up(&pid->wait_pidfd, TASK_NORMAL, 0,
+ poll_to_key(EPOLLIN | EPOLLRDNORM));
}
/*
--
2.25.1.362.g51ebf55
^ permalink raw reply related [flat|nested] 7+ messages in thread
* [PATCH] pidfd: exit: kill the no longer used thread_group_exited()
@ 2024-02-05 17:43 Oleg Nesterov
2024-02-06 13:03 ` Christian Brauner
2024-02-06 17:04 ` Tycho Andersen
0 siblings, 2 replies; 7+ messages in thread
From: Oleg Nesterov @ 2024-02-05 17:43 UTC (permalink / raw)
To: Christian Brauner
Cc: Andy Lutomirski, Eric W. Biederman, Tycho Andersen, linux-kernel
It was used by pidfd_poll() but now it has no callers.
If it finally finds a modular user we can revert this change, but note
that the comment above this helper and the changelog in 38fd525a4c61
("exit: Factor thread_group_exited out of pidfd_poll") are not accurate,
thread_group_exited() won't return true if all other threads have passed
exit_notify() and are zombies, it returns true only when all other threads
are completely gone. Not to mention that it can only work if the task
identified by @pid is a thread-group leader.
Signed-off-by: Oleg Nesterov <oleg@redhat.com>
---
include/linux/sched/signal.h | 2 --
kernel/exit.c | 24 ------------------------
2 files changed, 26 deletions(-)
diff --git a/include/linux/sched/signal.h b/include/linux/sched/signal.h
index 4b7664c56208..0a0e23c45406 100644
--- a/include/linux/sched/signal.h
+++ b/include/linux/sched/signal.h
@@ -735,8 +735,6 @@ static inline int thread_group_empty(struct task_struct *p)
#define delay_group_leader(p) \
(thread_group_leader(p) && !thread_group_empty(p))
-extern bool thread_group_exited(struct pid *pid);
-
extern struct sighand_struct *__lock_task_sighand(struct task_struct *task,
unsigned long *flags);
diff --git a/kernel/exit.c b/kernel/exit.c
index 493647fd7c07..41a12630cbbc 100644
--- a/kernel/exit.c
+++ b/kernel/exit.c
@@ -1896,30 +1896,6 @@ COMPAT_SYSCALL_DEFINE5(waitid,
}
#endif
-/**
- * thread_group_exited - check that a thread group has exited
- * @pid: tgid of thread group to be checked.
- *
- * Test if the thread group represented by tgid has exited (all
- * threads are zombies, dead or completely gone).
- *
- * Return: true if the thread group has exited. false otherwise.
- */
-bool thread_group_exited(struct pid *pid)
-{
- struct task_struct *task;
- bool exited;
-
- rcu_read_lock();
- task = pid_task(pid, PIDTYPE_PID);
- exited = !task ||
- (READ_ONCE(task->exit_state) && thread_group_empty(task));
- rcu_read_unlock();
-
- return exited;
-}
-EXPORT_SYMBOL(thread_group_exited);
-
/*
* This needs to be __function_aligned as GCC implicitly makes any
* implementation of abort() cold and drops alignment specified by
--
2.25.1.362.g51ebf55
^ permalink raw reply related [flat|nested] 7+ messages in thread
* Re: [PATCH] pidfd: change do_notify_pidfd() to use __wake_up(poll_to_key(EPOLLIN))
2024-02-05 14:13 [PATCH] pidfd: change do_notify_pidfd() to use __wake_up(poll_to_key(EPOLLIN)) Oleg Nesterov
@ 2024-02-06 12:53 ` Christian Brauner
2024-02-06 17:03 ` Tycho Andersen
1 sibling, 0 replies; 7+ messages in thread
From: Christian Brauner @ 2024-02-06 12:53 UTC (permalink / raw)
To: Oleg Nesterov
Cc: Christian Brauner, Andy Lutomirski, Eric W. Biederman,
Tycho Andersen, linux-kernel
On Mon, 05 Feb 2024 15:13:48 +0100, Oleg Nesterov wrote:
> rather than wake_up_all(). This way do_notify_pidfd() won't wakeup the
> POLLHUP-only waiters which wait for pid_task() == NULL.
>
> TODO:
> - as Christian pointed out, this asks for the new wake_up_all_poll()
> helper, it can already have other users.
>
> [...]
Applied to the vfs.pidfd branch of the vfs/vfs.git tree.
Patches in the vfs.pidfd branch should appear in linux-next soon.
Please report any outstanding bugs that were missed during review in a
new review to the original patch series allowing us to drop it.
It's encouraged to provide Acked-bys and Reviewed-bys even though the
patch has now been applied. If possible patch trailers will be updated.
Note that commit hashes shown below are subject to change due to rebase,
trailer updates or similar. If in doubt, please check the listed branch.
tree: https://git.kernel.org/pub/scm/linux/kernel/git/vfs/vfs.git
branch: vfs.pidfd
[1/1] pidfd: change do_notify_pidfd() to use __wake_up(poll_to_key(EPOLLIN))
https://git.kernel.org/vfs/vfs/c/e1358f104c9e
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [PATCH] pidfd: exit: kill the no longer used thread_group_exited()
2024-02-05 17:43 [PATCH] pidfd: exit: kill the no longer used thread_group_exited() Oleg Nesterov
@ 2024-02-06 13:03 ` Christian Brauner
2024-02-06 17:04 ` Tycho Andersen
1 sibling, 0 replies; 7+ messages in thread
From: Christian Brauner @ 2024-02-06 13:03 UTC (permalink / raw)
To: Oleg Nesterov
Cc: Christian Brauner, Andy Lutomirski, Eric W. Biederman,
Tycho Andersen, linux-kernel
On Mon, 05 Feb 2024 18:43:47 +0100, Oleg Nesterov wrote:
> It was used by pidfd_poll() but now it has no callers.
>
> If it finally finds a modular user we can revert this change, but note
> that the comment above this helper and the changelog in 38fd525a4c61
> ("exit: Factor thread_group_exited out of pidfd_poll") are not accurate,
> thread_group_exited() won't return true if all other threads have passed
> exit_notify() and are zombies, it returns true only when all other threads
> are completely gone. Not to mention that it can only work if the task
> identified by @pid is a thread-group leader.
>
> [...]
Applied to the vfs.pidfd branch of the vfs/vfs.git tree.
Patches in the vfs.pidfd branch should appear in linux-next soon.
Please report any outstanding bugs that were missed during review in a
new review to the original patch series allowing us to drop it.
It's encouraged to provide Acked-bys and Reviewed-bys even though the
patch has now been applied. If possible patch trailers will be updated.
Note that commit hashes shown below are subject to change due to rebase,
trailer updates or similar. If in doubt, please check the listed branch.
tree: https://git.kernel.org/pub/scm/linux/kernel/git/vfs/vfs.git
branch: vfs.pidfd
[1/1] pidfd: exit: kill the no longer used thread_group_exited()
https://git.kernel.org/vfs/vfs/c/3cad8297df1b
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [PATCH] pidfd: change do_notify_pidfd() to use __wake_up(poll_to_key(EPOLLIN))
2024-02-05 14:13 [PATCH] pidfd: change do_notify_pidfd() to use __wake_up(poll_to_key(EPOLLIN)) Oleg Nesterov
2024-02-06 12:53 ` Christian Brauner
@ 2024-02-06 17:03 ` Tycho Andersen
2024-02-07 8:45 ` [PATCH] pidfd: exit: kill the no longer used thread_group_exited() Christian Brauner
1 sibling, 1 reply; 7+ messages in thread
From: Tycho Andersen @ 2024-02-06 17:03 UTC (permalink / raw)
To: Oleg Nesterov
Cc: Christian Brauner, Andy Lutomirski, Eric W. Biederman,
linux-kernel
On Mon, Feb 05, 2024 at 03:13:48PM +0100, Oleg Nesterov wrote:
> rather than wake_up_all(). This way do_notify_pidfd() won't wakeup the
> POLLHUP-only waiters which wait for pid_task() == NULL.
>
> TODO:
> - as Christian pointed out, this asks for the new wake_up_all_poll()
> helper, it can already have other users.
>
> - we can probably discriminate the PIDFD_THREAD and non-PIDFD_THREAD
> waiters, but this needs more work. See
> https://lore.kernel.org/all/20240205140848.GA15853@redhat.com/
>
> Signed-off-by: Oleg Nesterov <oleg@redhat.com>
Reviewed-by: Tycho Andersen <tandersen@netflix.com>
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [PATCH] pidfd: exit: kill the no longer used thread_group_exited()
2024-02-05 17:43 [PATCH] pidfd: exit: kill the no longer used thread_group_exited() Oleg Nesterov
2024-02-06 13:03 ` Christian Brauner
@ 2024-02-06 17:04 ` Tycho Andersen
1 sibling, 0 replies; 7+ messages in thread
From: Tycho Andersen @ 2024-02-06 17:04 UTC (permalink / raw)
To: Oleg Nesterov
Cc: Christian Brauner, Andy Lutomirski, Eric W. Biederman,
linux-kernel
On Mon, Feb 05, 2024 at 06:43:47PM +0100, Oleg Nesterov wrote:
> It was used by pidfd_poll() but now it has no callers.
>
> If it finally finds a modular user we can revert this change, but note
> that the comment above this helper and the changelog in 38fd525a4c61
> ("exit: Factor thread_group_exited out of pidfd_poll") are not accurate,
> thread_group_exited() won't return true if all other threads have passed
> exit_notify() and are zombies, it returns true only when all other threads
> are completely gone. Not to mention that it can only work if the task
> identified by @pid is a thread-group leader.
>
> Signed-off-by: Oleg Nesterov <oleg@redhat.com>
Reviewed-by: Tycho Andersen <tandersen@netflix.com>
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [PATCH] pidfd: exit: kill the no longer used thread_group_exited()
2024-02-06 17:03 ` Tycho Andersen
@ 2024-02-07 8:45 ` Christian Brauner
0 siblings, 0 replies; 7+ messages in thread
From: Christian Brauner @ 2024-02-07 8:45 UTC (permalink / raw)
To: Tycho Andersen
Cc: Oleg Nesterov, Andy Lutomirski, Eric W. Biederman, linux-kernel
On Tue, Feb 06, 2024 at 10:04:08AM -0700, Tycho Andersen wrote:
> On Mon, Feb 05, 2024 at 06:43:47PM +0100, Oleg Nesterov wrote:
> > It was used by pidfd_poll() but now it has no callers.
> >
> > If it finally finds a modular user we can revert this change, but note
> > that the comment above this helper and the changelog in 38fd525a4c61
> > ("exit: Factor thread_group_exited out of pidfd_poll") are not accurate,
> > thread_group_exited() won't return true if all other threads have passed
> > exit_notify() and are zombies, it returns true only when all other threads
> > are completely gone. Not to mention that it can only work if the task
> > identified by @pid is a thread-group leader.
> >
> > Signed-off-by: Oleg Nesterov <oleg@redhat.com>
>
> Reviewed-by: Tycho Andersen <tandersen@netflix.com>
On Tue, Feb 06, 2024 at 10:03:41AM -0700, Tycho Andersen wrote:
> On Mon, Feb 05, 2024 at 03:13:48PM +0100, Oleg Nesterov wrote:
> > rather than wake_up_all(). This way do_notify_pidfd() won't wakeup the
> > POLLHUP-only waiters which wait for pid_task() == NULL.
> >
> > TODO:
> > - as Christian pointed out, this asks for the new wake_up_all_poll()
> > helper, it can already have other users.
> >
> > - we can probably discriminate the PIDFD_THREAD and non-PIDFD_THREAD
> > waiters, but this needs more work. See
> > https://lore.kernel.org/all/20240205140848.GA15853@redhat.com/
> >
> > Signed-off-by: Oleg Nesterov <oleg@redhat.com>
>
> Reviewed-by: Tycho Andersen <tandersen@netflix.com>
I updated the trailers with your RVBs.
^ permalink raw reply [flat|nested] 7+ messages in thread
end of thread, other threads:[~2024-02-07 8:45 UTC | newest]
Thread overview: 7+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2024-02-05 17:43 [PATCH] pidfd: exit: kill the no longer used thread_group_exited() Oleg Nesterov
2024-02-06 13:03 ` Christian Brauner
2024-02-06 17:04 ` Tycho Andersen
-- strict thread matches above, loose matches on Subject: below --
2024-02-05 14:13 [PATCH] pidfd: change do_notify_pidfd() to use __wake_up(poll_to_key(EPOLLIN)) Oleg Nesterov
2024-02-06 12:53 ` Christian Brauner
2024-02-06 17:03 ` Tycho Andersen
2024-02-07 8:45 ` [PATCH] pidfd: exit: kill the no longer used thread_group_exited() Christian Brauner
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox