Re: [PATCH v3 1/1] pipe: only enable the extra wake_up(rd_wait) for edge-triggered consumers

From: Oleg Nesterov

Date: Thu Jul 30 2026 - 11:06:11 EST


Hi Breno,

thanks for taking a look!

On 07/30, Breno Leitao wrote:
>
> On Thu, Jul 30, 2026 at 04:12:22PM +0200, Oleg Nesterov wrote:
> > - /* Epoll has some historical nasty semantics, this enables them */
> > - if (unlikely(!READ_ONCE(pipe->poll_usage)))
> > - WRITE_ONCE(pipe->poll_usage, true);
> > + /* Enable edge-triggered (epoll, io_uring) per-write wakeups */
> > + if ((filp->f_mode & FMODE_READ) &&
> > + wait && (wait->_key & EPOLLET) &&
> > + unlikely(!READ_ONCE(pipe->poll_et)))
> > + WRITE_ONCE(pipe->poll_et, true);
>
> Can I ask you to factor this out set code, and comment this nasty
> semantics in the function and why we need to do it?

Dou you mean a new helper?

You can't imagine how much time I spent trying to make the comments more
clear but keep them concise ;) More than writing the test for io_uring.

What exactly do you think the comment should say? I agree with anything in
advance. I thought that "edge-triggered" provides enough info, but I would
be happy to improve the docs.

And the helper's name? pipe_enable_poll_et() ?

Thanks,

Oleg.