This patch stops propagating SPLICE_F_NONBLOCK as O_NONBLOCK to the
underlaying socket. It follows the man page semantic - or at least my
This approach also provides a simple solution to the splice transfer size
problem. Say we have the following common sequence:
Unless we specify SPLICE_F_NONBLOCK, we can't use arbitrarily large size
transfers with the 1st splice since otherwise we will deadlock due to
pipe "fullness". But if we use SPLICE_F_NONBLOCK, the current implementation
will make the underlying socket non-blocking and thus will force us use poll
or other notification mechanism.
Choosing a splice transfer size so that we don't deadlock is tricky: we want
to use a large value to improve performance (less system calls) and at the
same time we need to stay under PIPE_BUFFERS packets. Fragmentation / MTU
complicates this equation further.