aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorHerbert Xu <herbert@gondor.apana.org.au>2009-03-17 16:10:52 -0400
committerDavid S. Miller <davem@davemloft.net>2009-03-17 16:10:52 -0400
commit2ffb4558194037133121e260022baa0d21590473 (patch)
tree15e070b0b42ba4466a23ee61a5352e59bf1bd4fc
parentd1c76af9e2434fac3add561e26c61b06503de986 (diff)
gro: Fix vlan/netpoll check again
Jarek Poplawski pointed out that my previous fix is broken for VLAN+netpoll as if netpoll is enabled we'd end up in the normal receive path instead of the VLAN receive path. This patch fixes it by calling the VLAN receive hook. Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au> Signed-off-by: David S. Miller <davem@davemloft.net>
-rw-r--r--net/8021q/vlan_core.c9
1 files changed, 6 insertions, 3 deletions
diff --git a/net/8021q/vlan_core.c b/net/8021q/vlan_core.c
index 6227248597c4..654e45f5719d 100644
--- a/net/8021q/vlan_core.c
+++ b/net/8021q/vlan_core.c
@@ -79,9 +79,6 @@ static int vlan_gro_common(struct napi_struct *napi, struct vlan_group *grp,
79{ 79{
80 struct sk_buff *p; 80 struct sk_buff *p;
81 81
82 if (netpoll_rx_on(skb))
83 return GRO_NORMAL;
84
85 if (skb_bond_should_drop(skb)) 82 if (skb_bond_should_drop(skb))
86 goto drop; 83 goto drop;
87 84
@@ -107,6 +104,9 @@ drop:
107int vlan_gro_receive(struct napi_struct *napi, struct vlan_group *grp, 104int vlan_gro_receive(struct napi_struct *napi, struct vlan_group *grp,
108 unsigned int vlan_tci, struct sk_buff *skb) 105 unsigned int vlan_tci, struct sk_buff *skb)
109{ 106{
107 if (netpoll_rx_on(skb))
108 return vlan_hwaccel_receive_skb(skb, grp, vlan_tci);
109
110 skb_gro_reset_offset(skb); 110 skb_gro_reset_offset(skb);
111 111
112 return napi_skb_finish(vlan_gro_common(napi, grp, vlan_tci, skb), skb); 112 return napi_skb_finish(vlan_gro_common(napi, grp, vlan_tci, skb), skb);
@@ -121,6 +121,9 @@ int vlan_gro_frags(struct napi_struct *napi, struct vlan_group *grp,
121 if (!skb) 121 if (!skb)
122 return NET_RX_DROP; 122 return NET_RX_DROP;
123 123
124 if (netpoll_rx_on(skb))
125 return vlan_hwaccel_receive_skb(skb, grp, vlan_tci);
126
124 return napi_frags_finish(napi, skb, 127 return napi_frags_finish(napi, skb,
125 vlan_gro_common(napi, grp, vlan_tci, skb)); 128 vlan_gro_common(napi, grp, vlan_tci, skb));
126} 129}