git: ba353c8950d5 - main - iflib: Drain configuration tasks before interface detach

Kevin Bowling <[email protected]>
Newsgroups gmane.os.freebsd.devel.cvs.src,gmane.os.freebsd.current.scm
Message-ID <[email protected]>
The branch main has been updated by kbowling:

URL: https://cgit.FreeBSD.org/src/commit/?id=ba353c8950d575f9d15b82c92658e660935fba25

commit ba353c8950d575f9d15b82c92658e660935fba25
Author:     Nick Price <[email protected]>
AuthorDate: 2026-08-08 06:17:16 +0000
Commit:     Kevin Bowling <[email protected]>
CommitDate: 2026-08-14 22:08:36 +0000

    iflib: Drain configuration tasks before interface detach
    
    iflib_device_deregister() sets IFC_IN_DETACH before removing the
    interface, but a task which already passed its detach check can still
    report a link change.  This can re-arm if_linktask after
    ether_ifdetach() has drained it and leave work pending across queue
    teardown.
    
    Drain the entire private taskqueue before ether_ifdetach().  Drivers
    may register their own link-related configuration tasks there, so
    draining only the framework admin task leaves the same race for those
    drivers.
    
    MFC after:      2 weeks
    Differential Revision:  https://reviews.freebsd.org/D58452
    
    Co-authored-by: Andrew Gallatin <[email protected]>
    Co-authored-by: Kevin Bowling <[email protected]>
---
 sys/net/iflib.c | 7 +++++++
 1 file changed, 7 insertions(+)

diff --git a/sys/net/iflib.c b/sys/net/iflib.c
index 461ff0ba273e..cda60f174a31 100644
--- a/sys/net/iflib.c
+++ b/sys/net/iflib.c
@@ -5658,6 +5658,13 @@ iflib_device_deregister(if_ctx_t ctx)
 	iflib_unregister_vlan_handlers(ctx);
 
 	iflib_netmap_detach(ifp);
+	/*
+	 * A task that passed its IFC_IN_DETACH check before the flag was set
+	 * can still report a link change.  Drain every private task before
+	 * ether_ifdetach() performs the final if_linktask drain.  Drivers may
+	 * register their own link-related tasks on this taskqueue.
+	 */
+	taskqueue_drain_all(ctx->ifc_tq);
 	ether_ifdetach(ifp);
 
 	CTX_LOCK(ctx);
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.