Merge tag 'please-pull-pstore' of git://git.kernel.org/pub/scm/linux/kernel/git/aegl...
[firefly-linux-kernel-4.4.55.git] / net / sched / cls_tcindex.c
index 8d0e83d6903e69672a54cfd332cb92817f2d7eb0..30f10fb07f4a7d50e390c7df730f94366e00fb73 100644 (file)
@@ -254,10 +254,15 @@ tcindex_set_parms(struct net *net, struct tcf_proto *tp, unsigned long base,
        cp->tp = tp;
 
        if (p->perfect) {
+               int i;
+
                cp->perfect = kmemdup(p->perfect,
                                      sizeof(*r) * cp->hash, GFP_KERNEL);
                if (!cp->perfect)
                        goto errout;
+               for (i = 0; i < cp->hash; i++)
+                       tcf_exts_init(&cp->perfect[i].exts,
+                                     TCA_TCINDEX_ACT, TCA_TCINDEX_POLICE);
                balloc = 1;
        }
        cp->h = p->h;
@@ -353,6 +358,9 @@ tcindex_set_parms(struct net *net, struct tcf_proto *tp, unsigned long base,
                f = kzalloc(sizeof(*f), GFP_KERNEL);
                if (!f)
                        goto errout_alloc;
+               f->key = handle;
+               tcindex_filter_result_init(&f->result);
+               f->next = NULL;
        }
 
        if (tb[TCA_TCINDEX_CLASSID]) {
@@ -376,9 +384,7 @@ tcindex_set_parms(struct net *net, struct tcf_proto *tp, unsigned long base,
                struct tcindex_filter *nfp;
                struct tcindex_filter __rcu **fp;
 
-               f->key = handle;
-               f->result = new_filter_result;
-               f->next = NULL;
+               tcf_exts_change(tp, &f->result.exts, &r->exts);
 
                fp = cp->h + (handle % cp->hash);
                for (nfp = rtnl_dereference(*fp);