]> CyberLeo.Net >> Repos - FreeBSD/stable/10.git/commit
MFC 312782
authorkp <kp@ccf9f872-aa2e-dd11-9fc8-001c23d0bc1f>
Wed, 1 Feb 2017 21:44:50 +0000 (21:44 +0000)
committerkp <kp@ccf9f872-aa2e-dd11-9fc8-001c23d0bc1f>
Wed, 1 Feb 2017 21:44:50 +0000 (21:44 +0000)
commit9dc3bed30f35d928cacaa765c102a3d83ef4764e
treea7bbeb55c6397b3266a38a270afb901aca3f8a75
parenta58ce9884392be5655411112aa9463ab1f7f0cb9
MFC 312782

bridge: Release the bridge lock when calling bridge_set_ifcap()

This calls ioctl() handlers for the different interfaces in the bridge.
These handlers expect to get called in an ioctl context where it's safe
for them to sleep. We may not sleep with the bridge lock held.

However, we still need to protect the interface list, to ensure it
doesn't get changed while we iterate over it.
Use BRIDGE_XLOCK(), which prevents bridge members from being removed.
Adding bridge members is safe, because it uses LIST_INSERT_HEAD().

This caused panics when adding xen interfaces to a bridge.

PR: 216304
Reviewed by: ae
Sponsored by: RootBSD
Differential Revision: https://reviews.freebsd.org/D9290

git-svn-id: svn://svn.freebsd.org/base/stable/10@313066 ccf9f872-aa2e-dd11-9fc8-001c23d0bc1f
sys/net/if_bridge.c
sys/net/if_bridgevar.h