aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPouria Mousavizadeh Tehrani <pouria@FreeBSD.org>2026-03-16 12:53:45 +0000
committerPouria Mousavizadeh Tehrani <pouria@FreeBSD.org>2026-03-17 08:11:29 +0000
commita8b9a05d3cad3bdcb9008232c9172a1aeffbe9fd (patch)
tree63620bc6d24d04517a6b1deb590d28c9110b71de
parent6580d040861dfbf6c630a93cbf41f2a2c7e7b327 (diff)
if_bridge(4): don't sleep under epoch(9) in destruction
bridge tries to run callout_drain(9) twice under epoch during destruction. once for bridge_timer, which is not required to be under epoch. second time for the BSTP callout, which is already disabled earlier inside bridge_delete_member. Reviewed by: glebius, zlei MFC after: 2 weeks Differential Revision: https://reviews.freebsd.org/D55876
-rw-r--r--sys/net/if_bridge.c4
1 files changed, 2 insertions, 2 deletions
diff --git a/sys/net/if_bridge.c b/sys/net/if_bridge.c
index 0cd71a20fa35..d69fe85453f9 100644
--- a/sys/net/if_bridge.c
+++ b/sys/net/if_bridge.c
@@ -953,8 +953,6 @@ bridge_clone_destroy(struct if_clone *ifc, struct ifnet *ifp, uint32_t flags)
BRIDGE_UNLOCK(sc);
- NET_EPOCH_ENTER(et);
-
callout_drain(&sc->sc_brcallout);
BRIDGE_LIST_LOCK();
@@ -962,6 +960,8 @@ bridge_clone_destroy(struct if_clone *ifc, struct ifnet *ifp, uint32_t flags)
BRIDGE_LIST_UNLOCK();
bstp_detach(&sc->sc_stp);
+
+ NET_EPOCH_ENTER(et);
#ifdef ALTQ
IFQ_PURGE(&ifp->if_snd);
#endif