Hi,

Small fix for if_bridge.c. bridge_state_change() is called
from taskqueue and curvnet is not set.
Patch attached.

The panic:
#6  0xffffffff80d9a8c9 in trap_fatal (frame=0xfffffe01a5a998b0, eva=<value 
optimized out>) at /usr/src/sys/amd64/amd64/trap.c:854
#7  0xffffffff80d9ab5e in trap_pfault (frame=0xfffffe01a5a998b0, usermode=<value 
optimized out>) at /usr/src/sys/amd64/amd64/trap.c:676
#8  0xffffffff80d9a215 in trap (frame=0xfffffe01a5a998b0) at 
/usr/src/sys/amd64/amd64/trap.c:426
#9  0xffffffff80d7a8c2 in calltrap () at 
/usr/src/sys/amd64/amd64/exception.S:235
#10 0xffffffff81e1b767 in bridge_state_change (ifp=0x1, state=Unhandled dwarf 
expression opcode 0x93
) at /usr/src/sys/modules/if_bridge/../../net/if_bridge.c:3068
#11 0xffffffff809beaa0 in taskqueue_run_locked (queue=0x20) at 
/usr/src/sys/kern/subr_taskqueue.c:431
#12 0xffffffff809be96a in taskqueue_run (queue=0xfffff80005192d00) at 
/usr/src/sys/kern/subr_taskqueue.c:450
#13 0xffffffff8093ac61 in intr_event_execute_handlers (p=<value optimized out>, 
ie=0xfffff80005171200) at /usr/src/sys/kern/kern_intr.c:1241
#14 0xffffffff8093b63c in ithread_loop (arg=0xfffff8000517af40) at 
/usr/src/sys/kern/kern_intr.c:1254

Thanks for reviewing,
Nikos
Index: sys/net/if_bridge.c
===================================================================
--- sys/net/if_bridge.c (revision 282651)
+++ sys/net/if_bridge.c (working copy)
@@ -3065,9 +3065,11 @@ bridge_state_change(struct ifnet *ifp, int state)
                "discarding"
        };
 
+       CURVNET_SET(ifp->if_vnet);
        if (V_log_stp)
                log(LOG_NOTICE, "%s: state changed to %s on %s\n",
                    sc->sc_ifp->if_xname, stpstates[state], ifp->if_xname);
+       CURVNET_RESTORE();
 }
 
 /*
_______________________________________________
freebsd-net@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/freebsd-net
To unsubscribe, send any mail to "freebsd-net-unsubscr...@freebsd.org"

Reply via email to