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...