Re: [PATCH] net: dev: fix the incorrect hold of net namespace's lo device
From: Gao feng <hidden>
Date: 2012-08-23 03:09:28
于 2012年08月22日 19:24, Eric Dumazet 写道:
On Wed, 2012-08-22 at 19:00 +0800, Gao feng wrote:quoted
Hi Eric I saw your patch and think this patch is clear and doesn't change too much logic. I test your patch, it not fix this problem. In my test case,when moving a net device to another net namespace, Because you patch delete NETDEV_UNREGISTER event from dst_dev_event, we will just put dst entries into the dst garbage list in event NETDEV_DOWN,without call dst_ifdown to change these dst entries' device to the lo device,and now this net device belongs to the new net namespace.Then fix the "moving a net device to another net namespace", instead of slowing down other common operations.
okay, I will send a patch to fix this problem after your patch beeing applied.
dev_change_net_namespace() is probably a better place to put your patchquoted
After the net device beeing moved to another net namespace, I rmmod this net device's driver,this will trigger the new added event NETDEV_UNREGISTER_FINISH, so in dst_dev_event,we will change these dst entries's device to the new net namespace's lo device,and this will make the referenct count of the new net namespace's lo device incorrect. when we exit the new net namespace,this emg message is still exist. Message from syslogd@Donkey at Aug 22 18:50:13 ... kernel:[ 1161.979036] unregister_netdevice: waiting for lo to become free. Usage count = 1 And because net_mutex is locked here,so we can't create new net namespace.quoted
rcu_barrier() at this place will kill some workloads.I think this will only add some workloads when unregister a net device. Do I miss something?Yes, rcu_barrier() at this point is killing performance, because we hold RTNL. We worked hard to batch things, your patch is a huge step backward.
Get it,thanks for your explanation.