• Soheil Hassas Yeganeh's avatar
    tcp: improve recv_skip_hint for tcp_zerocopy_receive · c208bdb9
    Soheil Hassas Yeganeh authored
    tcp_zerocopy_receive() rounds down the zc->length a multiple of
    PAGE_SIZE. This results in two issues:
    - tcp_zerocopy_receive sets recv_skip_hint to the length of the
      receive queue if the zc->length input is smaller than the
      PAGE_SIZE, even though the data in receive queue could be
      zerocopied.
    - tcp_zerocopy_receive would set recv_skip_hint of 0, in cases
      where we have a little bit of data after the perfectly-sized
      packets.
    
    To fix these issues, do not store the rounded down value in
    zc->length. Round down the length passed to zap_page_range(),
    and return min(inq, zc->length) when the zap_range is 0.
    Signed-off-by: default avatarSoheil Hassas Yeganeh <soheil@google.com>
    Signed-off-by: default avatarEric Dumazet <edumazet@google.com>
    Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
    c208bdb9
tcp.c 104 KB