On Fri, 23 Jun 2023 at 15:34, David Howells <dhowells@xxxxxxxxxx> wrote: > > Can you consider merging something like the attached patch? Unfortunately, > there are applications out there that depend on a read from pipe() waiting > until the buffer is full under some circumstances. Patch a28c8b9db8a1 > removed the conditionality on there being an attached writer. This patch seems actively wrong, in that now it's possibly waiting for data that won't come, even if it's nonblocking. What are these alleged broken apps? That commit a28c8b9db8a1 ("pipe: remove 'waiting_writers' merging logic") is 3+ years old, and we haven't heard people complain about it. POSIX guarantees PIPE_BUF data, but that's 4kB. Your made-up test-case is not valid, and never has been. Yes, we used to do that write merging for performance reasons to avoid extra system calls. And yes, we'll maintain semantics if people actually end up having broken apps that depend on them, but I want to know *what* broken app depends on this before I re-instate the write merging. And if we do re-instate it, I'm afraid we will have to do so with that whole "waiting_writers" logic, so that we don't have the "reader waits for data that might not come". Because that patch of yours seems really broken. Nobody has *ever* said "a read() on a pipe will always satisfy the whole buffer". That's just completely bogus. So let's name and shame the code that actually depended on it. And maybe we'll have to revert commit a28c8b9db8a1, but after three+ years of nobody reporting it I'm not really super-convinced. Linus