• Eric Dumazet's avatar
    tcp: make connect() mem charging friendly · 355a901e
    Eric Dumazet authored
    While working on sk_forward_alloc problems reported by Denys
    Fedoryshchenko, we found that tcp connect() (and fastopen) do not call
    sk_wmem_schedule() for SYN packet (and/or SYN/DATA packet), so
    sk_forward_alloc is negative while connect is in progress.
    
    We can fix this by calling regular sk_stream_alloc_skb() both for the
    SYN packet (in tcp_connect()) and the syn_data packet in
    tcp_send_syn_data()
    
    Then, tcp_send_syn_data() can avoid copying syn_data as we simply
    can manipulate syn_data->cb[] to remove SYN flag (and increment seq)
    
    Instead of open coding memcpy_fromiovecend(), simply use this helper.
    
    This leaves in socket write queue clean fast clone skbs.
    
    This was tested against our fastopen packetdrill tests.
    Reported-by: default avatarDenys Fedoryshchenko <nuclearcat@nuclearcat.com>
    Signed-off-by: default avatarEric Dumazet <edumazet@google.com>
    Acked-by: default avatarYuchung Cheng <ycheng@google.com>
    Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
    355a901e
tcp_output.c 96.5 KB