On 12/20/2017 02:41 PM, Cong Wang wrote: > On Wed, Dec 20, 2017 at 12:09 PM, John Fastabend > <john.fastab...@gmail.com> wrote: >> RCU grace period is needed for lockless qdiscs added in the commit >> c5ad119fb6c09 ("net: sched: pfifo_fast use skb_array"). >> >> It is needed now that qdiscs may be lockless otherwise we risk >> free'ing a qdisc that is still in use from datapath. Additionally, >> push list cleanup into RCU callback. Otherwise we risk the datapath >> adding skbs during removal. > > What about qdisc_graft() -> dev_deactivate() -> synchronize_net() ? > It doesn't work with your "lockless" patches? >
Well this is only in the 'parent == NULL' case otherwise we call cops->graft(). Most sch_* seem to use qdisc_replace and this uses sch_tree_lock(). The only converted qdisc mq and mqprio at this point don't care though and do their own dev_deactivate/activate. So its not fixing anything in the above mentioned commit. I still think it will need to be done eventually. If it resolves the miniq case it seems like a good idea. Although per Jakub's comment perhaps I pulled too much into the RCU handler.