diff options
Diffstat (limited to 'drivers/net/virtio_net.c')
| -rw-r--r-- | drivers/net/virtio_net.c | 10 | 
1 files changed, 7 insertions, 3 deletions
| diff --git a/drivers/net/virtio_net.c b/drivers/net/virtio_net.c index 82e520d2cb12..0824e6999e49 100644 --- a/drivers/net/virtio_net.c +++ b/drivers/net/virtio_net.c @@ -406,9 +406,13 @@ static struct sk_buff *page_to_skb(struct virtnet_info *vi,  	offset += hdr_padded_len;  	p += hdr_padded_len; -	copy = len; -	if (copy > skb_tailroom(skb)) -		copy = skb_tailroom(skb); +	/* Copy all frame if it fits skb->head, otherwise +	 * we let virtio_net_hdr_to_skb() and GRO pull headers as needed. +	 */ +	if (len <= skb_tailroom(skb)) +		copy = len; +	else +		copy = ETH_HLEN + metasize;  	skb_put_data(skb, p, copy);  	if (metasize) { |