On Tue, 14 Jul 2020 20:03:06 +0300 Petr Machata wrote: > Mirred currently does not mix well with blocks executed after the qdisc > root lock is taken. This includes classification blocks (such as in PRIO, > ETS, DRR qdiscs) and qevents. The locking caused by the packet mirrored by > mirred can cause deadlocks: either when the thread of execution attempts to > take the lock a second time, or when two threads end up waiting on each > other's locks. > > The qevent patchset attempted to not introduce further badness of this > sort, and dropped the lock before executing the qevent block. However this > lead to too little locking and races between qdisc configuration and packet > enqueue in the RED qdisc. > > Before the deadlock issues are solved in a way that can be applied across > many qdiscs reasonably easily, do for qevents what is done for the > classification blocks and just keep holding the root lock. > > That is done in patch #1. Patch #2 then drops the now unnecessary root_lock > argument from Qdisc_ops.enqueue.
Applied, thanks.