On 2020/11/5 14:04, Cong Wang wrote: > On Mon, Nov 2, 2020 at 11:24 PM Yunsheng Lin <linyunsh...@huawei.com> wrote: >>>> From my understanding, we can do anything about the old qdisc (including >>>> destorying the old qdisc) after some_qdisc_is_busy() return false. >>> >>> But the current code does the reset _before_ some_qdisc_is_busy(). ;) >> >> If lock is taken when doing reset, it does not matter if the reset is >> before some_qdisc_is_busy(), right? > > Why not? How about the following scenario? > > CPU0: CPU1: > dev_reset_queue()
There is no skb in the dqisc now. > net_tx_action() > -> sch_direct_xmit() So when CPU1 calls net_tx_action(), there is no skb to send and no skb to be requeued too. > -> dev_requeue_skb() > some_qdisc_is_busy() > // waiting for TX action on CPU1 > // now some packets are requeued >