| From foo@baz Wed May 28 21:03:54 PDT 2014 |
| From: Eric Dumazet <edumazet@google.com> |
| Date: Thu, 3 Apr 2014 09:28:10 -0700 |
| Subject: net-gro: reset skb->truesize in napi_reuse_skb() |
| |
| From: Eric Dumazet <edumazet@google.com> |
| |
| [ Upstream commit e33d0ba8047b049c9262fdb1fcafb93cb52ceceb ] |
| |
| Recycling skb always had been very tough... |
| |
| This time it appears GRO layer can accumulate skb->truesize |
| adjustments made by drivers when they attach a fragment to skb. |
| |
| skb_gro_receive() can only subtract from skb->truesize the used part |
| of a fragment. |
| |
| I spotted this problem seeing TcpExtPruneCalled and |
| TcpExtTCPRcvCollapsed that were unexpected with a recent kernel, where |
| TCP receive window should be sized properly to accept traffic coming |
| from a driver not overshooting skb->truesize. |
| |
| Signed-off-by: Eric Dumazet <edumazet@google.com> |
| Signed-off-by: David S. Miller <davem@davemloft.net> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| --- |
| net/core/dev.c | 1 + |
| 1 file changed, 1 insertion(+) |
| |
| --- a/net/core/dev.c |
| +++ b/net/core/dev.c |
| @@ -4051,6 +4051,7 @@ static void napi_reuse_skb(struct napi_s |
| skb->vlan_tci = 0; |
| skb->dev = napi->dev; |
| skb->skb_iif = 0; |
| + skb->truesize = SKB_TRUESIZE(skb_end_offset(skb)); |
| |
| napi->skb = skb; |
| } |