/* XXX: For standalone actions, we don't need a RCU grace period either, because * actions are always connected to filters and filters are already destroyed in * RCU callbacks, so after a RCU grace period actions are already disconnected * from filters. Readers later can not find us. */ static void free_tcf(struct tc_action *p) { free_percpu(p->cpu_bstats); free_percpu(p->cpu_qstats); tcf_set_action_cookie(&p->act_cookie, NULL); if (p->goto_chain) tcf_action_goto_chain_fini(p); kfree(p); }
/* XXX: For standalone actions, we don't need a RCU grace period either, because * actions are always connected to filters and filters are already destroyed in * RCU callbacks, so after a RCU grace period actions are already disconnected * from filters. Readers later can not find us. */ static void free_tcf(struct tc_action *p) { free_percpu(p->cpu_bstats); free_percpu(p->cpu_qstats); if (p->act_cookie) { kfree(p->act_cookie->data); kfree(p->act_cookie); } if (p->goto_chain) tcf_action_goto_chain_fini(p); kfree(p); }