Page MenuHomeFreeBSD

Fix deadlock when destroying VLANs
ClosedPublic

Authored by hselasky on Oct 10 2018, 7:54 AM.
Tags
None
Referenced Files
Unknown Object (File)
Sun, Mar 17, 2:08 AM
Unknown Object (File)
Mon, Mar 4, 8:11 AM
Unknown Object (File)
Jan 13 2024, 2:28 PM
Unknown Object (File)
Dec 20 2023, 7:07 AM
Unknown Object (File)
Dec 3 2023, 3:12 AM
Unknown Object (File)
Nov 15 2023, 1:33 AM
Unknown Object (File)
Nov 10 2023, 6:15 AM
Unknown Object (File)
Nov 7 2023, 3:31 PM
Subscribers

Details

Summary

There is a deadlock when destroying VLANs after the epoch changes were made.

Thread 1:

epoch_block_handler_preempt() at epoch_block_handler_preempt+0x90/frame 0xfffffe00261b3970
ck_epoch_synchronize_wait() at ck_epoch_synchronize_wait+0x9d/frame 0xfffffe00261b39c0
epoch_wait_preempt() at epoch_wait_preempt+0x170/frame 0xfffffe00261b3a20
vlan_setmulti() at vlan_setmulti+0xb4/frame 0xfffffe00261b3a70
vlan_ioctl() at vlan_ioctl+0x83/frame 0xfffffe00261b3ad0
in6m_release_task() at in6m_release_task+0x32e/frame 0xfffffe00261b3b30
gtaskqueue_run_locked() at gtaskqueue_run_locked+0xf9/frame 0xfffffe00261b3b80
gtaskqueue_thread_loop() at gtaskqueue_thread_loop+0x88/frame 0xfffffe00261b3bb0
fork_exit() at fork_exit+0x84/frame 0xfffffe00261b3bf0
fork_trampoline() at fork_trampoline+0xe/frame 0xfffffe00261b3bf0

Thread 2:

sleepq_switch() at sleepq_switch+0x10d/frame 0xfffffe002bffd3f0
sleepq_wait() at sleepq_wait+0x43/frame 0xfffffe002bffd420
_sx_xlock_hard() at _sx_xlock_hard+0x4a6/frame 0xfffffe002bffd4c0
_sx_xlock() at _sx_xlock+0xc1/frame 0xfffffe002bffd500
in6_leavegroup() at in6_leavegroup+0x27/frame 0xfffffe002bffd520
in6_purgeaddr() at in6_purgeaddr+0xc2/frame 0xfffffe002bffd6a0
if_purgeaddrs() at if_purgeaddrs+0x11e/frame 0xfffffe002bffd750
if_detach_internal() at if_detach_internal+0x709/frame 0xfffffe002bffd7d0
if_detach() at if_detach+0x3d/frame 0xfffffe002bffd7f0
vlan_clone_destroy() at vlan_clone_destroy+0x21/frame 0xfffffe002bffd820
if_clone_destroyif() at if_clone_destroyif+0x175/frame 0xfffffe002bffd870
if_clone_destroy() at if_clone_destroy+0x205/frame 0xfffffe002bffd8c0
ifioctl() at ifioctl+0x582/frame 0xfffffe002bffd990
kern_ioctl() at kern_ioctl+0x2ba/frame 0xfffffe002bffd9f0
sys_ioctl() at sys_ioctl+0x15e/frame 0xfffffe002bffdac0
amd64_syscall() at amd64_syscall+0x28c/frame 0xfffffe002bffdbf0
fast_syscall_common() at fast_syscall_common+0x101/frame 0xfffffe002bffdbf0
syscall (54, FreeBSD ELF64, sys_ioctl), rip = 0x80047b92a, rsp = 0x7fffffffe318, rbp = 0x7fffffffe330 ---

Diff Detail

Repository
rS FreeBSD src repository - subversion
Lint
Lint Not Applicable
Unit
Tests Not Applicable

Event Timeline

hselasky edited the summary of this revision. (Show Details)
This revision is now accepted and ready to land.Oct 12 2018, 10:12 PM

Tested-by: Slava Shwartsman <slavash@freebsd.org>

This revision was automatically updated to reflect the committed changes.