From mboxrd@z Thu Jan 1 00:00:00 1970 From: Cong Wang Subject: Re: [patch net-next v4 03/12] net: sched: introduce chain object to uapi Date: Tue, 24 Jul 2018 16:20:08 -0700 Message-ID: References: <20180723072312.4153-1-jiri@resnulli.us> <20180723072312.4153-4-jiri@resnulli.us> Mime-Version: 1.0 Content-Type: text/plain; charset="UTF-8" Cc: Linux Kernel Network Developers , David Miller , Jamal Hadi Salim , Jakub Kicinski , Simon Horman , john.hurley@netronome.com, David Ahern , mlxsw@mellanox.com, sridhar.samudrala@intel.com To: Jiri Pirko Return-path: Received: from mail-pl0-f68.google.com ([209.85.160.68]:34483 "EHLO mail-pl0-f68.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S2388495AbeGYA3H (ORCPT ); Tue, 24 Jul 2018 20:29:07 -0400 Received: by mail-pl0-f68.google.com with SMTP id f6-v6so2419773plo.1 for ; Tue, 24 Jul 2018 16:20:20 -0700 (PDT) In-Reply-To: Sender: netdev-owner@vger.kernel.org List-ID: On Tue, Jul 24, 2018 at 3:30 PM Cong Wang wrote: > > On Mon, Jul 23, 2018 at 12:25 AM Jiri Pirko wrote: > > + switch (n->nlmsg_type) { > > + case RTM_NEWCHAIN: > > + /* In case the chain was successfully added, take a reference > > + * to the chain. This ensures that an empty chain > > + * does not disappear at the end of this function. > > + */ > > + tcf_chain_hold(chain); > > + chain->explicitly_created = true; > > + tc_chain_notify(chain, NULL, 0, NLM_F_CREATE | NLM_F_EXCL, > > + RTM_NEWCHAIN, false); > > + break; > > + case RTM_DELCHAIN: > > + /* Flush the chain first as the user requested chain removal. */ > > + tcf_chain_flush(chain); > > + /* In case the chain was successfully deleted, put a reference > > + * to the chain previously taken during addition. > > + */ > > + tcf_chain_put_explicitly_created(chain); > > + break; > > I don't see you send notification to user-space when deleting a chain, > am I missing anything? Oh, it is hidden in tcf_chain_put(): void tcf_chain_put(struct tcf_chain *chain) { if (--chain->refcnt == 0) { tc_chain_notify(chain, NULL, 0, 0, RTM_DELCHAIN, false); tc_chain_tmplt_del(chain); tcf_chain_destroy(chain); } } So, you only send out notification when the last refcnt is gone. If the chain that is being deleted by a user is still used by an action, you return 0 or -EPERM?