diff options
author | Willem de Bruijn <willemb@google.com> | 2013-10-22 10:59:18 -0400 |
---|---|---|
committer | Greg Kroah-Hartman <gregkh@linuxfoundation.org> | 2013-11-04 04:35:13 -0800 |
commit | cef1e66ef92e7821e58e7dc32a2b764541a74ff4 (patch) | |
tree | 9d2e73df7ade44d02fd883d668e698fc7e2b3ae3 | |
parent | 3365bb990a76d4d7dd4b36202aa7ade95bde7c70 (diff) | |
download | lwn-cef1e66ef92e7821e58e7dc32a2b764541a74ff4.tar.gz lwn-cef1e66ef92e7821e58e7dc32a2b764541a74ff4.zip |
sit: amend "allow to use rtnl ops on fb tunnel"
Amend backport to 3.11.y of
[ Upstream commit 205983c43700ac3a81e7625273a3fa83cd2759b5 ]
The discussion thread in the upstream commit mentions that in
backports to stable-* branches, the line
- unregister_netdevice_queue(sitn->fb_tunnel_dev, &list);
must be omitted if that branch does not have commit 5e6700b3bf98
("sit: add support of x-netns"). This line has correctly been omitted
in the backport to 3.10, which indeed does not have that commit.
It was also removed in the backport to 3.11.y, which does have that
commit.
This causes the following steps to hit a BUG at net/core/dev.c:5039:
`modprobe sit; rmmod sit`
The bug demonstrates that it causes a device to be unregistered twice.
The simple fix is to apply the one line in the upstream commit that
was dropped in the backport to 3.11 (3783100374653e2e7fbdf68c710f5).
This brings the logic in line with upstream linux, net and net-next
branches.
Signed-off-by: Willem de Bruijn <willemb@google.com>
Acked-by: Nicolas Dichtel <nicolas.dichtel@6wind.com>
Reviewed-by: Veaceslav Falico <vfalico@redhat.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
-rw-r--r-- | net/ipv6/sit.c | 1 |
1 files changed, 0 insertions, 1 deletions
diff --git a/net/ipv6/sit.c b/net/ipv6/sit.c index 86f639ba5407..a51ad079ee58 100644 --- a/net/ipv6/sit.c +++ b/net/ipv6/sit.c @@ -1708,7 +1708,6 @@ static void __net_exit sit_exit_net(struct net *net) rtnl_lock(); sit_destroy_tunnels(sitn, &list); - unregister_netdevice_queue(sitn->fb_tunnel_dev, &list); unregister_netdevice_many(&list); rtnl_unlock(); } |