From: Eric Dumazet Date: Thu, 10 Jan 2013 12:36:42 +0000 (+0000) Subject: net_sched: more precise pkt_len computation X-Git-Tag: v3.9-rc1~139^2~411 X-Git-Url: http://git.openpandora.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=1def9238d4aa2146924994aa4b7dc861f03b9362;p=pandora-kernel.git net_sched: more precise pkt_len computation One long standing problem with TSO/GSO/GRO packets is that skb->len doesn't represent a precise amount of bytes on wire. Headers are only accounted for the first segment. For TCP, thats typically 66 bytes per 1448 bytes segment missing, an error of 4.5 % for normal MSS value. As consequences : 1) TBF/CBQ/HTB/NETEM/... can send more bytes than the assigned limits. 2) Device stats are slightly under estimated as well. Fix this by taking account of headers in qdisc_skb_cb(skb)->pkt_len computation. Packet schedulers should use qdisc pkt_len instead of skb->len for their bandwidth limitations, and TSO enabled devices drivers could use pkt_len if their statistics are not hardware assisted, and if they don't scratch skb->cb[] first word. Both egress and ingress paths work, thanks to commit fda55eca5a (net: introduce skb_transport_header_was_set()) : If GRO built a GSO packet, it also set the transport header for us. Signed-off-by: Eric Dumazet Cc: Jamal Hadi Salim Cc: Stephen Hemminger Cc: Paolo Valente Cc: Herbert Xu Cc: Patrick McHardy Signed-off-by: David S. Miller --- Reading git-diff-tree failed