]> git.proxmox.com Git - mirror_ubuntu-kernels.git/commit
tcp: improve recv_skip_hint for tcp_zerocopy_receive
authorSoheil Hassas Yeganeh <soheil@google.com>
Fri, 11 Oct 2019 03:27:02 +0000 (23:27 -0400)
committerDavid S. Miller <davem@davemloft.net>
Sun, 13 Oct 2019 18:16:25 +0000 (11:16 -0700)
commitc208bdb93788cfd7982c35480f98e75d658719a7
treef26d0a89710f3bef10119321319b02f2201fc136
parent524900a212f419ed4a73c909b2c957912d38f7c1
tcp: improve recv_skip_hint for tcp_zerocopy_receive

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: Soheil Hassas Yeganeh <soheil@google.com>
Signed-off-by: Eric Dumazet <edumazet@google.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
net/ipv4/tcp.c