mirror of https://gitee.com/openkylin/linux.git
tcp: Set rcv zerocopy hint correctly if skb last frag is < PAGE_SIZE
At present, if the last frag of paged data in a skb has < PAGE_SIZE data, we compute the recv_skip_hint as being equal to the size of that frag and the entire next skb. Instead, just return the runt frag size as the hint. recv_skip_hint is used by the application to skip over bytes that can not be mmaped, so returning a too big chunk is pessimistic and forces more bytes to be copied. Signed-off-by: Arjun Roy <arjunroy@google.com> Acked-by: Soheil Hassas Yeganeh <soheil@google.com> Signed-off-by: Eric Dumazet <edumazet@google.com> Signed-off-by: Jakub Kicinski <jakub.kicinski@netronome.com>
This commit is contained in:
parent
29115cef85
commit
0e62719056
|
@ -1778,6 +1778,8 @@ static int tcp_zerocopy_receive(struct sock *sk,
|
|||
while (length + PAGE_SIZE <= zc->length) {
|
||||
if (zc->recv_skip_hint < PAGE_SIZE) {
|
||||
if (skb) {
|
||||
if (zc->recv_skip_hint > 0)
|
||||
break;
|
||||
skb = skb->next;
|
||||
offset = seq - TCP_SKB_CB(skb)->seq;
|
||||
} else {
|
||||
|
|
Loading…
Reference in New Issue