|
|
@@ -1208,7 +1208,7 @@ static void vxlan_rcv(struct vxlan_sock *vs, struct sk_buff *skb,
|
|
|
stats->rx_bytes += skb->len;
|
|
|
u64_stats_update_end(&stats->syncp);
|
|
|
|
|
|
- netif_rx(skb);
|
|
|
+ gro_cells_receive(&vxlan->gro_cells, skb);
|
|
|
|
|
|
return;
|
|
|
drop:
|
|
|
@@ -2446,6 +2446,8 @@ static void vxlan_setup(struct net_device *dev)
|
|
|
|
|
|
vxlan->dev = dev;
|
|
|
|
|
|
+ gro_cells_init(&vxlan->gro_cells, dev);
|
|
|
+
|
|
|
for (h = 0; h < FDB_HASH_SIZE; ++h)
|
|
|
INIT_HLIST_HEAD(&vxlan->fdb_head[h]);
|
|
|
}
|
|
|
@@ -2885,6 +2887,7 @@ static void vxlan_dellink(struct net_device *dev, struct list_head *head)
|
|
|
hlist_del_rcu(&vxlan->hlist);
|
|
|
spin_unlock(&vn->sock_lock);
|
|
|
|
|
|
+ gro_cells_destroy(&vxlan->gro_cells);
|
|
|
list_del(&vxlan->next);
|
|
|
unregister_netdevice_queue(dev, head);
|
|
|
}
|
|
|
@@ -3093,8 +3096,10 @@ static void __net_exit vxlan_exit_net(struct net *net)
|
|
|
/* If vxlan->dev is in the same netns, it has already been added
|
|
|
* to the list by the previous loop.
|
|
|
*/
|
|
|
- if (!net_eq(dev_net(vxlan->dev), net))
|
|
|
+ if (!net_eq(dev_net(vxlan->dev), net)) {
|
|
|
+ gro_cells_destroy(&vxlan->gro_cells);
|
|
|
unregister_netdevice_queue(vxlan->dev, &list);
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
unregister_netdevice_many(&list);
|