Hi Stefano, When debugging the splice EINTR bug I fixed the other day, I found the whole tcp_splice_sock_handler() pretty confusing to follow. So, I was working on some cleanups. But then I noticed something more specifically odd here. We've discussed the use of SO_RCVLOWAT previously. AIUI, you found it essential to achieve reasonable throughput and load for spliced connections. I think we've agreed before that it's not entirely the right tool for the job; just the only one available. Except... as far as I can tell, it's never invoked. AFAICT the only place we enable the RCVLOWAT stuff is in a block under this if: if (!(conn->flags & lowat_set_flag) && readlen > (long)c->tcp.pipe_size / 10) { But... this occurs immediately after: if (readlen >= (long)c->tcp.pipe_size * 10 / 100) continue; .. which is a strictly more inclusive condition, so we'll never reach the RCVLOWAT block. To confirm, I tried putting an ASSERT(0) in that block, and didn't hit it with spliced iperf3 runs. Am I missing something? -- David Gibson (he or they) | I'll have my music baroque, and my code david AT gibson.dropbear.id.au | minimalist, thank you, not the other way | around. http://www.ozlabs.org/~dgibson