On Mon 03 Sep 2018 at 18:50, Cong Wang <xiyou.wangc...@gmail.com> wrote: > On Mon, Sep 3, 2018 at 12:06 AM Vlad Buslov <vla...@mellanox.com> wrote: >> >> Action API was changed to work with actions and action_idr in concurrency >> safe manner, however tcf_del_walker() still uses actions without taking >> reference to them first and deletes them directly, disregarding possible >> concurrent delete. >> >> Change tcf_del_walker() to use tcf_idr_delete_index() that doesn't require >> caller to hold reference to action and accepts action id as argument, >> instead of direct action pointer. > > Hmm, why doesn't tcf_del_walker() just take idrinfo->lock? At least > tcf_dump_walker() already does.
Because tcf_del_walker() calls __tcf_idr_release(), which take idrinfo->lock itself (deadlock). It also calls sleeping functions like tcf_action_goto_chain_fini(), so just implementing function that releases action without taking idrinfo->lock is not enough.