be less tricky about when ifq_free is handled.
authordlg <dlg@openbsd.org>
Fri, 2 Jun 2017 00:07:12 +0000 (00:07 +0000)
committerdlg <dlg@openbsd.org>
Fri, 2 Jun 2017 00:07:12 +0000 (00:07 +0000)
commit9d60c08c44c4f992f7339dcfb28c35bb80e993f3
tree0e1dc7bb7bb786ba80cc962e4f4c4a63431ec24d
parent54e34ddfb56fb015e759306da07b071d74b82f5b
be less tricky about when ifq_free is handled.

instead of assuming start routines only run inside the ifq serialiser,
only rely on the serialisation provided by the ifq mtx which is
explicitly used during ifq_deq ops.

ie, free the mbufs in ifq_free at the end of ifq_deq ops instead
of in the ifq_serialiser loop. ifq deq ops arent necessarily called
within the serialiser.

this should fix panics caused by fq codel on top of bce (which calls
bce_start from it's tx completion path instead of ifq_restart).

ok mikeb@
sys/net/ifq.c