On Thu, Sep 06, 2018 at 07:57:25PM -0700, Cong Wang wrote: > > - if (root_ht == ht) { > > + if (ht->is_root) { > > > What's wrong with comparing pointers with root ht?
The fact that there may be more than one tcf_proto sharing tp->data. > > NL_SET_ERR_MSG_MOD(extack, "Not allowed to delete root > > node"); > > return -EINVAL; > > } > > @@ -795,6 +797,10 @@ static int u32_set_parms(struct net *net, struct > > tcf_proto *tp, > > NL_SET_ERR_MSG_MOD(extack, "Link hash table > > not found"); > > return -EINVAL; > > } > > + if (ht_down->is_root) { > > root ht is saved in tp->root, so you can compare ht_down with it too, > if you want. > > If this check is all what you need, you don't need an extra flag. Again, *which* tp? We can trivially check that we are not linking to/deleting our own root, sure. But there's nothing to stop doing the same via another tcf_proto...