Merge branch 'x86-platform-for-linus' of git://git.kernel.org/pub/scm/linux/kernel...
[firefly-linux-kernel-4.4.55.git] / net / sched / cls_flow.c
index 95736fa479f3c17c63d66f9a8251e1a911bdb125..4ac515f2a6cecbcb56159c9c11892771e3816ddd 100644 (file)
@@ -354,8 +354,8 @@ static void flow_destroy_filter(struct rcu_head *head)
        struct flow_filter *f = container_of(head, struct flow_filter, rcu);
 
        del_timer_sync(&f->perturb_timer);
-       tcf_exts_destroy(f->tp, &f->exts);
-       tcf_em_tree_destroy(f->tp, &f->ematches);
+       tcf_exts_destroy(&f->exts);
+       tcf_em_tree_destroy(&f->ematches);
        kfree(f);
 }
 
@@ -493,6 +493,8 @@ static int flow_change(struct net *net, struct sk_buff *in_skb,
        tcf_exts_change(tp, &fnew->exts, &e);
        tcf_em_tree_change(tp, &fnew->ematches, &t);
 
+       netif_keep_dst(qdisc_dev(tp->q));
+
        if (tb[TCA_FLOW_KEYS]) {
                fnew->keymask = keymask;
                fnew->nkeys   = nkeys;
@@ -530,10 +532,10 @@ static int flow_change(struct net *net, struct sk_buff *in_skb,
        return 0;
 
 err2:
-       tcf_em_tree_destroy(tp, &t);
+       tcf_em_tree_destroy(&t);
        kfree(fnew);
 err1:
-       tcf_exts_destroy(tp, &e);
+       tcf_exts_destroy(&e);
        return err;
 }