From: Doron Roberts-Kedes <doro...@fb.com> Date: Tue, 26 Jun 2018 18:33:33 -0700
> On receving an incomplete message, the existing code stores the > remaining length of the cloned skb in the early_eaten field instead of > incrementing the value returned by __strp_recv. This defers invocation > of sock_rfree for the current skb until the next invocation of > __strp_recv, which returns early_eaten if early_eaten is non-zero. > > This behavior causes a stall when the current message occupies the very > tail end of a massive skb, and strp_peek/need_bytes indicates that the > remainder of the current message has yet to arrive on the socket. The > TCP receive buffer is totally full, causing the TCP window to go to > zero, so the remainder of the message will never arrive. > > Incrementing the value returned by __strp_recv by the amount otherwise > stored in early_eaten prevents stalls of this nature. > > Signed-off-by: Doron Roberts-Kedes <doro...@fb.com> Applied and queued up for -stable.