ovs: Remove rtnl_lock() from ovs_exit_net()
authorKirill Tkhai <ktkhai@virtuozzo.com>
Thu, 29 Mar 2018 16:21:09 +0000 (19:21 +0300)
committerDavid S. Miller <davem@davemloft.net>
Thu, 29 Mar 2018 17:47:54 +0000 (13:47 -0400)
Here we iterate for_each_net() and removes
vport from alive net to the exiting net.

ovs_net::dps are protected by ovs_mutex(),
and the others, who change it (ovs_dp_cmd_new(),
__dp_destroy()) also take it.
The same with datapath::ports list.

So, we remove rtnl_lock() here.

Signed-off-by: Kirill Tkhai <ktkhai@virtuozzo.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
net/openvswitch/datapath.c

index 9746ee30a99b8d13537ce3ec895d54e0d6658af9..015e24e08909ff432753d1f4d6d23da11ecf33e9 100644 (file)
@@ -2363,12 +2363,10 @@ static void __net_exit ovs_exit_net(struct net *dnet)
        list_for_each_entry_safe(dp, dp_next, &ovs_net->dps, list_node)
                __dp_destroy(dp);
 
-       rtnl_lock();
        down_read(&net_rwsem);
        for_each_net(net)
                list_vports_from_net(net, dnet, &head);
        up_read(&net_rwsem);
-       rtnl_unlock();
 
        /* Detach all vports from given namespace. */
        list_for_each_entry_safe(vport, vport_next, &head, detach_list) {