OSDN Git Service

net: pskb_trim_rcsum() and CHECKSUM_COMPLETE are friends
authorEric Dumazet <edumazet@google.com>
Wed, 18 Apr 2018 18:43:15 +0000 (11:43 -0700)
committerDavid S. Miller <davem@davemloft.net>
Thu, 19 Apr 2018 17:44:11 +0000 (13:44 -0400)
commit88078d98d1bb085d72af8437707279e203524fa5
treebf20f9ebb371aa14ce699ad9be0afc093babd04b
parent292eba02dbb4c41da840e462e51ee97d80d873d1
net: pskb_trim_rcsum() and CHECKSUM_COMPLETE are friends

After working on IP defragmentation lately, I found that some large
packets defeat CHECKSUM_COMPLETE optimization because of NIC adding
zero paddings on the last (small) fragment.

While removing the padding with pskb_trim_rcsum(), we set skb->ip_summed
to CHECKSUM_NONE, forcing a full csum validation, even if all prior
fragments had CHECKSUM_COMPLETE set.

We can instead compute the checksum of the part we are trimming,
usually smaller than the part we keep.

Signed-off-by: Eric Dumazet <edumazet@google.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
include/linux/skbuff.h
net/core/skbuff.c