Page MenuHomeFreeBSD

D22071.id63456.diff
No OneTemporary

D22071.id63456.diff

Index: sys/net/iflib.c
===================================================================
--- sys/net/iflib.c
+++ sys/net/iflib.c
@@ -703,6 +703,7 @@
#endif
static int iflib_register(if_ctx_t);
static void iflib_deregister(if_ctx_t);
+static void iflib_unregister_vlan_handlers(if_ctx_t ctx);
static void iflib_init_locked(if_ctx_t ctx);
static void iflib_add_device_sysctl_pre(if_ctx_t ctx);
static void iflib_add_device_sysctl_post(if_ctx_t ctx);
@@ -5007,6 +5008,9 @@
struct taskqgroup *tqg;
iflib_fl_t fl;
+ /* Unregister VLAN event handlers early */
+ iflib_unregister_vlan_handlers(ctx);
+
ether_ifdetach(ifp);
/* XXX drain any dependent tasks */
tqg = qgroup_if_io_tqg;
@@ -5080,12 +5084,16 @@
ctx->ifc_flags |= IFC_IN_DETACH;
STATE_UNLOCK(ctx);
+ /* Unregister VLAN handlers before calling iflib_stop() */
+ iflib_unregister_vlan_handlers(ctx);
+
+ iflib_netmap_detach(ifp);
+ ether_ifdetach(ifp);
+
CTX_LOCK(ctx);
iflib_stop(ctx);
CTX_UNLOCK(ctx);
- iflib_netmap_detach(ifp);
- ether_ifdetach(ifp);
iflib_rem_pfil(ctx);
if (ctx->ifc_led_dev != NULL)
led_destroy(ctx->ifc_led_dev);
@@ -5375,13 +5383,8 @@
}
static void
-iflib_deregister(if_ctx_t ctx)
+iflib_unregister_vlan_handlers(if_ctx_t ctx)
{
- if_t ifp = ctx->ifc_ifp;
-
- /* Remove all media */
- ifmedia_removeall(&ctx->ifc_media);
-
/* Unregister VLAN events */
if (ctx->ifc_vlan_attach_event != NULL) {
EVENTHANDLER_DEREGISTER(vlan_config, ctx->ifc_vlan_attach_event);
@@ -5392,6 +5395,19 @@
ctx->ifc_vlan_detach_event = NULL;
}
+}
+
+static void
+iflib_deregister(if_ctx_t ctx)
+{
+ if_t ifp = ctx->ifc_ifp;
+
+ /* Remove all media */
+ ifmedia_removeall(&ctx->ifc_media);
+
+ /* Ensure that VLAN event handlers are unregistered */
+ iflib_unregister_vlan_handlers(ctx);
+
/* Release kobject reference */
kobj_delete((kobj_t) ctx, NULL);

File Metadata

Mime Type
text/plain
Expires
Sun, Feb 1, 11:04 AM (3 h, 1 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
28349161
Default Alt Text
D22071.id63456.diff (1 KB)

Event Timeline