Message ID | 20100217062541.GA10350@serverengines.com |
---|---|
State | Accepted, archived |
Delegated to: | David Miller |
Headers | show |
On Wed, Feb 17, 2010 at 11:55:43AM +0530, Ajit Khaparde wrote: > > Here is the patch:- > > Traffic (tcp) doesnot start on a vlan interface when gro is enabled. > Even the tcp handshake was not taking place. > This is because, the eth_type_trans call before the netif_receive_skb > in napi_gro_finish() resets the skb->dev to napi->dev from the previously > set vlan netdev interface. This causes the ip_route_input to drop the > incoming packet considering it as a packet coming from a martian source. > > I could repro this on 2.6.32.7 (stable) and 2.6.33-rc7. > With this fix, the traffic starts and the test runs fine on both vlan > and non-vlan interfaces. > > CC: Herbert Xu <herbert@gondor.apana.org.au> > CC: Patrick McHardy <kaber@trash.net> > Signed-off-by: Ajit Khaparde <ajitk@serverengines.com> Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au> Thanks a lot!
From: Ajit Khaparde <ajitkhaparde@gmail.com> Date: Wed, 17 Feb 2010 11:55:43 +0530 > Thanks Herbert. I think you meant something like this: > + skb->protocol = eth_type_trans(skb, skb->dev); > > Here is the patch:- > > Traffic (tcp) doesnot start on a vlan interface when gro is enabled. > Even the tcp handshake was not taking place. > This is because, the eth_type_trans call before the netif_receive_skb > in napi_gro_finish() resets the skb->dev to napi->dev from the previously > set vlan netdev interface. This causes the ip_route_input to drop the > incoming packet considering it as a packet coming from a martian source. > > I could repro this on 2.6.32.7 (stable) and 2.6.33-rc7. > With this fix, the traffic starts and the test runs fine on both vlan > and non-vlan interfaces. > > CC: Herbert Xu <herbert@gondor.apana.org.au> > CC: Patrick McHardy <kaber@trash.net> > Signed-off-by: Ajit Khaparde <ajitk@serverengines.com> Applied, thanks. -- To unsubscribe from this list: send the line "unsubscribe netdev" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
diff --git a/net/core/dev.c b/net/core/dev.c index be9924f..ec87421 100644 --- a/net/core/dev.c +++ b/net/core/dev.c @@ -2761,7 +2761,7 @@ gro_result_t napi_frags_finish(struct napi_struct *napi, struct sk_buff *skb, switch (ret) { case GRO_NORMAL: case GRO_HELD: - skb->protocol = eth_type_trans(skb, napi->dev); + skb->protocol = eth_type_trans(skb, skb->dev); if (ret == GRO_HELD) skb_gro_pull(skb, -ETH_HLEN);