hselasky ccccebe3aa Fix deadlock when destroying VLANs.
Synchronizing the epoch before freeing the multicast addresses while holding
the VLAN_XLOCK() might lead to a deadlock. Use deferred freeing of the VLAN
multicast addresses to resolve deadlock. Backtrace:

Thread1:
epoch_block_handler_preempt()
ck_epoch_synchronize_wait()
epoch_wait_preempt()
vlan_setmulti()
vlan_ioctl()
in6m_release_task()
gtaskqueue_run_locked()
gtaskqueue_thread_loop()
fork_exit()
fork_trampoline()

Thread2:
sleepq_switch()
sleepq_wait()
_sx_xlock_hard()
_sx_xlock()
in6_leavegroup()
in6_purgeaddr()
if_purgeaddrs()
if_detach_internal()
if_detach()
vlan_clone_destroy()
if_clone_destroyif()
if_clone_destroy()
ifioctl()
kern_ioctl()
sys_ioctl()
amd64_syscall()
fast_syscall_common()
syscall()

Differential revision:	https://reviews.freebsd.org/D17496
Reviewed by:		slavash, mmacy
Approved by:		re (kib)
Sponsored by:		Mellanox Technologies
2018-10-15 10:29:29 +00:00
..
2018-05-31 09:11:21 +00:00
2017-02-06 08:49:57 +00:00
2018-10-03 07:35:16 +00:00
2018-10-03 07:35:16 +00:00
2018-10-15 10:29:29 +00:00
2018-05-19 05:27:49 +00:00
2018-03-23 16:56:44 +00:00
2018-03-23 16:56:44 +00:00
2018-06-16 19:21:09 +00:00
2017-07-24 03:59:50 +00:00