Thread (14 messages) 14 messages, 2 authors, 2024-02-05

Re: [PATCH 1/3] pidfd_poll: report POLLHUP when pid_task() == NULL

From: Oleg Nesterov <oleg@redhat.com>
Date: 2024-02-02 19:06:58
Also in: lkml

On 02/02, Christian Brauner wrote:
quoted
I think we need a simpler patch. I was going to send it as 4/4, but I'd
like to think more, _perhaps_ we can also discriminate the PIDFD_THREAD
and non-PIDFD_THREAD waiters. I'll try to make the patch(es) tomorrow or
Right, I didn't go that far.
quoted
at least provided more info.

3 notes for now:

	1. we can't use wake_up_poll(), it passes nr_exclusive => 1
Bah. So we need the same stuff we did for io_uring and use
__wake_up() directly. Or we add wake_up_all_poll() and convert the other
three callsites:
...
+#define wake_up_all_poll(x, m)                                                 \
+       __wake_up(x, TASK_NORMAL, 0, poll_to_key(m))
Agreed, but I think this + s/wake_up/wake_up_all_poll/ conversions
need a separate patch.

-void do_notify_pidfd(struct task_struct *task)
+void pidfd_wake_up_poll(struct task_struct *task, bool dead)
 {
-	struct pid *pid;
-
 	WARN_ON(task->exit_state == 0);
-	pid = task_pid(task);
-	wake_up_all(&pid->wait_pidfd);
+	WARN_ON(mask == 0);
+	wake_up_all_poll(&task_pid(task)->wait_pidfd,
+			 EPOLLIN | EPOLLRDNORM | dead ? EPOLLHUP : 0);
No...

This is still overcomplicated and is not right.

Christian, I'll write another email tomorrow.

Oleg.
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help