In vxlan_destroy_tunnels func, unregister_netdevice_queue is called after
gro_cells_destroy func. However, in unregister_netdevice_queue func, the
gro_cells_destroy func will also call the gro_cells_destroy func as the
following routine:
unregister_netdevice_many() -> rollback_registered_many()
-> ndo_uninit() -> gro_cells_destroy()

Signed-off-by: Suanming.Mou <mousuanm...@huawei.com>
Reviewed-by: Zhiqiang Liu <liuzhiqian...@huawei.com>
Reviewed-by: Stefano Brivio <sbri...@redhat.com>
---
 drivers/net/vxlan.c | 4 +---
 1 file changed, 1 insertion(+), 3 deletions(-)

diff --git a/drivers/net/vxlan.c b/drivers/net/vxlan.c
index 077f1b9f2761..d76dfed8d9bb 100644
--- a/drivers/net/vxlan.c
+++ b/drivers/net/vxlan.c
@@ -4335,10 +4335,8 @@ static void vxlan_destroy_tunnels(struct net *net, 
struct list_head *head)
                /* 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)) {
-                       gro_cells_destroy(&vxlan->gro_cells);
+               if (!net_eq(dev_net(vxlan->dev), net))
                        unregister_netdevice_queue(vxlan->dev, head);
-               }
        }

        for (h = 0; h < PORT_HASH_SIZE; ++h)
-- 
1.7.12.4

Reply via email to