Thread (30 messages) 30 messages, 3 authors, 2018-09-08

Re: [PATCH 2/7] mark root hnode explicitly

flat view

From: Cong Wang <hidden>
Date: 2018-09-07 07:36:15

On Thu, Sep 6, 2018 at 3:59 AM Al Viro [off-list ref] wrote:
quoted hunk ↗ jump to hunk
diff --git a/net/sched/cls_u32.c b/net/sched/cls_u32.c
index 3f985f29ef30..d14048e38b5c 100644
--- a/net/sched/cls_u32.c
+++ b/net/sched/cls_u32.c
@@ -84,6 +84,7 @@ struct tc_u_hnode {
        int                     refcnt;
        unsigned int            divisor;
        struct idr              handle_idr;
+       bool                    is_root;
        struct rcu_head         rcu;
        u32                     flags;
        /* The 'ht' field MUST be the last field in structure to allow for
@@ -377,6 +378,7 @@ static int u32_init(struct tcf_proto *tp)
        root_ht->refcnt++;
        root_ht->handle = tp_c ? gen_new_htid(tp_c, root_ht) : 0x80000000;
        root_ht->prio = tp->prio;
+       root_ht->is_root = true;
        idr_init(&root_ht->handle_idr);

        if (tp_c == NULL) {
@@ -693,7 +695,7 @@ static int u32_delete(struct tcf_proto *tp, void *arg, bool *last,
                goto out;
        }

-       if (root_ht == ht) {
+       if (ht->is_root) {

What's wrong with comparing pointers with root ht?

quoted hunk ↗ jump to hunk
                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.
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help