On 08/22/18 08:37 AM, John Fastabend wrote: > Currently, the lower protocols sk_write_space handler is not called if > TLS is sending a scatterlist via tls_push_sg. However, normally > tls_push_sg calls do_tcp_sendpage, which may be under memory pressure, > that in turn may trigger a wait via sk_wait_event. Typically, this > happens when the in-flight bytes exceed the sdnbuf size. In the normal > case when enough ACKs are received sk_write_space() will be called and > the sk_wait_event will be woken up allowing it to send more data > and/or return to the user. > > But, in the TLS case because the sk_write_space() handler does not > wake up the events the above send will wait until the sndtimeo is > exceeded. By default this is MAX_SCHEDULE_TIMEOUT so it look like a > hang to the user (especially this impatient user). To fix this pass > the sk_write_space event to the lower layers sk_write_space event > which in the TCP case will wake any pending events. > > I observed the above while integrating sockmap and ktls. It > initially appeared as test_sockmap (modified to use ktls) occasionally > hanging. To reliably reproduce this reduce the sndbuf size and stress > the tls layer by sending many 1B sends. This results in every byte > needing a header and each byte individually being sent to the crypto > layer. > > Signed-off-by: John Fastabend <john.fastab...@gmail.com>
Super, thanks! Acked-by: Dave Watson <davejwat...@fb.com>