summaryrefslogtreecommitdiffstats
path: root/net
diff options
context:
space:
mode:
authorHerbert Xu <herbert@gondor.apana.org.au>2009-03-17 13:10:52 -0700
committerDavid S. Miller <davem@davemloft.net>2009-03-17 13:10:52 -0700
commit2ffb4558194037133121e260022baa0d21590473 (patch)
tree15e070b0b42ba4466a23ee61a5352e59bf1bd4fc /net
parentd1c76af9e2434fac3add561e26c61b06503de986 (diff)
downloadlinux-stable-2ffb4558194037133121e260022baa0d21590473.tar.gz
linux-stable-2ffb4558194037133121e260022baa0d21590473.tar.bz2
linux-stable-2ffb4558194037133121e260022baa0d21590473.zip
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>
Diffstat (limited to '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,
{
struct sk_buff *p;
- if (netpoll_rx_on(skb))
- return GRO_NORMAL;
-
if (skb_bond_should_drop(skb))
goto drop;
@@ -107,6 +104,9 @@ drop:
int vlan_gro_receive(struct napi_struct *napi, struct vlan_group *grp,
unsigned int vlan_tci, struct sk_buff *skb)
{
+ if (netpoll_rx_on(skb))
+ return vlan_hwaccel_receive_skb(skb, grp, vlan_tci);
+
skb_gro_reset_offset(skb);
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,
if (!skb)
return NET_RX_DROP;
+ if (netpoll_rx_on(skb))
+ return vlan_hwaccel_receive_skb(skb, grp, vlan_tci);
+
return napi_frags_finish(napi, skb,
vlan_gro_common(napi, grp, vlan_tci, skb));
}