From f13b1689d753f333459878ac27cb12d414502a09 Mon Sep 17 00:00:00 2001 From: WANG Cong Date: Wed, 8 Apr 2015 14:48:30 -0700 Subject: [PATCH] vxlan: do not exit on error in vxlan_stop() We need to clean up vxlan despite vxlan_igmp_leave() fails. This fixes the following kernel warning: WARNING: CPU: 0 PID: 6 at lib/debugobjects.c:263 debug_print_object+0x7c/0x8d() ODEBUG: free active (active state 0) object type: timer_list hint: vxlan_cleanup+0x0/0xd0 CPU: 0 PID: 6 Comm: kworker/u8:0 Not tainted 4.0.0-rc7+ #953 Hardware name: Bochs Bochs, BIOS Bochs 01/01/2011 Workqueue: netns cleanup_net 0000000000000009 ffff88011955f948 ffffffff81a25f5a 00000000253f253e ffff88011955f998 ffff88011955f988 ffffffff8107608e 0000000000000000 ffffffff814deba2 ffff8800d4e94000 ffffffff82254c30 ffffffff81fbe455 Call Trace: [] dump_stack+0x4c/0x65 [] warn_slowpath_common+0x9c/0xb6 [] ? debug_print_object+0x7c/0x8d [] warn_slowpath_fmt+0x46/0x48 [] debug_print_object+0x7c/0x8d [] ? vxlan_fdb_destroy+0x5b/0x5b [] __debug_check_no_obj_freed+0xc3/0x15f [] debug_check_no_obj_freed+0x12/0x16 [] slab_free_hook+0x64/0x6c [] ? kvfree+0x31/0x33 [] kfree+0x101/0x1ac [] kvfree+0x31/0x33 [] netdev_freemem+0x18/0x1a [] netdev_release+0x2e/0x32 [] device_release+0x5a/0x92 [] kobject_cleanup+0x49/0x5e [] kobject_put+0x45/0x49 [] netdev_run_todo+0x26f/0x283 [] ? rollback_registered_many+0x20f/0x23b [] rtnl_unlock+0xe/0x10 [] default_device_exit_batch+0x12a/0x139 [] ? wait_woken+0x8f/0x8f [] ops_exit_list+0x2b/0x57 [] cleanup_net+0x154/0x1e7 [] process_one_work+0x255/0x4ad [] ? process_one_work+0x161/0x4ad [] worker_thread+0x1cd/0x2ab [] ? process_scheduled_works+0x2f/0x2f [] kthread+0xd4/0xdc [] ? local_clock+0x19/0x22 [] ? __kthread_parkme+0x83/0x83 [] ret_from_fork+0x58/0x90 [] ? __kthread_parkme+0x83/0x83 For the long-term, we should handle NETDEV_{UP,DOWN} event from the lower device of a tunnel device. Fixes: 56ef9c909b40 ("vxlan: Move socket initialization to within rtnl scope") Cc: Marcelo Ricardo Leitner Signed-off-by: Cong Wang Acked-by: Marcelo Ricardo Leitner Signed-off-by: David S. Miller --- drivers/net/vxlan.c | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/drivers/net/vxlan.c b/drivers/net/vxlan.c index 682838b48d37..577c9b071ad9 100644 --- a/drivers/net/vxlan.c +++ b/drivers/net/vxlan.c @@ -2256,11 +2256,8 @@ static int vxlan_stop(struct net_device *dev) int ret = 0; if (vxlan_addr_multicast(&vxlan->default_dst.remote_ip) && - !vxlan_group_used(vn, vxlan)) { + !vxlan_group_used(vn, vxlan)) ret = vxlan_igmp_leave(vxlan); - if (ret) - return ret; - } del_timer_sync(&vxlan->age_timer); -- 2.20.1