Commit 0e627190 authored by Arjun Roy's avatar Arjun Roy Committed by Jakub Kicinski
Browse files

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: default avatarArjun Roy <>
Acked-by: default avatarSoheil Hassas Yeganeh <>
Signed-off-by: default avatarEric Dumazet <>
Signed-off-by: default avatarJakub Kicinski <>
parent 29115cef
......@@ -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)
skb = skb->next;
offset = seq - TCP_SKB_CB(skb)->seq;
} else {
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment