Cong Wang <xiyou.wangc...@gmail.com> writes:
> On Fri, Jun 26, 2020 at 3:46 PM Petr Machata <pe...@mellanox.com> wrote: >> The function tcf_qevent_handle() should be invoked when qdisc hits the >> "interesting event" corresponding to a block. This function releases root >> lock for the duration of executing the attached filters, to allow packets >> generated through user actions (notably mirred) to be reinserted to the >> same qdisc tree. > > Are you sure releasing the root lock in the middle of an enqueue operation > is a good idea? I mean, it seems racy with qdisc change or reset path, > for example, __red_change() could update some RED parameters > immediately after you release the root lock. So I had mulled over this for a while. If packets are enqueued or dequeued while the lock is released, maybe the packet under consideration should have been hard_marked instead of prob_marked, or vice versa. (I can't really go to not marked at all, because the fact that we ran the qevent is a very observable commitment to put the packet in the queue with marking.) I figured that is not such a big deal. Regarding a configuration change, for a brief period after the change, a few not-yet-pushed packets could have been enqueued with ECN marking even as I e.g. disabled ECN. This does not seem like a big deal either, these are transient effects.