On Tue, May 30, 2023 at 6:26 PM David Howells <dhowells@xxxxxxxxxx> wrote: > > When used with sendfile(), it sets SPLICE_F_MORE (which causes MSG_MORE to be > passed to the network protocol) if we haven't yet read everything that the > user requested and clears it if we fulfilled what the user requested. > > This has the weird effect that MSG_MORE gets kind of inverted. [...] I hate this patch. The old code is unquestionably garbage, but this just ends up resulting in more of the same. The reason the old code is garbage is that it sets SPLICE_F_MORE entirely in the wrong place. It sets it *after* it has done the splice(). That's just crazy. And that craziness is the direct cause of the bug. You try to fix the bug by just extending on the craziness. No. The crazy should be removed, not extended upon. The "flag" setting should be done *before* the send, if we know that more data is pending even after the "do_splice_to()". Not after. And the networking code should do its own "oh, splice gave me X bytes, but I only used Y, so I know more data is pending, so I'll set MSG_MORE on the *current* packet". But that's entirely inside of whatever networking code that does th esplice. So no. I absolutely refuse to entertain this patch because it's completely broken. The fact that the old code was also completely broken is *not* an excuse to make for more nonsensical breakage that may or may just hide the crazy. Linus