Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net
authorDavid S. Miller <davem@davemloft.net>
Fri, 10 Nov 2017 01:00:18 +0000 (10:00 +0900)
committerDavid S. Miller <davem@davemloft.net>
Fri, 10 Nov 2017 01:00:18 +0000 (10:00 +0900)
Simple cases of overlapping changes in the packet scheduler.

Must easier to resolve this time.

Which probably means that I screwed it up somehow.

Signed-off-by: David S. Miller <davem@davemloft.net>
29 files changed:
1  2 
MAINTAINERS
drivers/net/bonding/bond_main.c
drivers/net/ethernet/marvell/mvpp2.c
drivers/net/ethernet/mellanox/mlx5/core/en_fs.c
drivers/net/usb/qmi_wwan.c
include/linux/skbuff.h
include/net/act_api.h
include/net/pkt_cls.h
kernel/events/core.c
net/core/skbuff.c
net/ipv4/tcp_input.c
net/l2tp/l2tp_ip.c
net/l2tp/l2tp_ip6.c
net/qrtr/qrtr.c
net/sched/act_api.c
net/sched/act_bpf.c
net/sched/act_ife.c
net/sched/act_mirred.c
net/sched/cls_api.c
net/sched/cls_basic.c
net/sched/cls_bpf.c
net/sched/cls_flow.c
net/sched/cls_flower.c
net/sched/cls_fw.c
net/sched/cls_matchall.c
net/sched/cls_tcindex.c
net/sched/cls_u32.c
net/xfrm/xfrm_policy.c
tools/include/uapi/linux/bpf.h

diff --cc MAINTAINERS
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
diff --cc net/qrtr/qrtr.c
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
index 871351358c10d0f71746a9060b9402ab125b3415,e43c56d5b96a2943d59733185b51b8bafe19f8fa..5f169ded347e8714aca536f93e1480d228df72c8
@@@ -115,10 -118,11 +120,13 @@@ static void basic_destroy(struct tcf_pr
        list_for_each_entry_safe(f, n, &head->flist, link) {
                list_del_rcu(&f->link);
                tcf_unbind_filter(tp, &f->res);
-               call_rcu(&f->rcu, basic_delete_filter);
 +              idr_remove_ext(&head->handle_idr, f->handle);
+               if (tcf_exts_get_net(&f->exts))
+                       call_rcu(&f->rcu, basic_delete_filter);
+               else
+                       __basic_delete_filter(f);
        }
 +      idr_destroy(&head->handle_idr);
        kfree_rcu(head, rcu);
  }
  
@@@ -129,7 -133,7 +137,8 @@@ static int basic_delete(struct tcf_prot
  
        list_del_rcu(&f->link);
        tcf_unbind_filter(tp, &f->res);
 +      idr_remove_ext(&head->handle_idr, f->handle);
+       tcf_exts_get_net(&f->exts);
        call_rcu(&f->rcu, basic_delete_filter);
        *last = list_empty(&head->flist);
        return 0;
@@@ -222,9 -226,9 +231,10 @@@ static int basic_change(struct net *net
        *arg = fnew;
  
        if (fold) {
 +              idr_replace_ext(&head->handle_idr, fnew, fnew->handle);
                list_replace_rcu(&fold->link, &fnew->link);
                tcf_unbind_filter(tp, &fold->res);
+               tcf_exts_get_net(&fold->exts);
                call_rcu(&fold->rcu, basic_delete_filter);
        } else {
                list_add_rcu(&fnew->link, &head->flist);
index dc9bd9a0070b5f47347cc6980359f8fcd55e9057,990eb4d91d54255ace7eb400298eb433edd47cbe..fb680dafac5a2e49515ab84ecc820c592bca4ae0
@@@ -523,9 -518,9 +527,10 @@@ static int cls_bpf_change(struct net *n
                prog->gen_flags |= TCA_CLS_FLAGS_NOT_IN_HW;
  
        if (oldprog) {
 +              idr_replace_ext(&head->handle_idr, prog, handle);
                list_replace_rcu(&oldprog->link, &prog->link);
                tcf_unbind_filter(tp, &oldprog->res);
+               tcf_exts_get_net(&oldprog->exts);
                call_rcu(&oldprog->rcu, cls_bpf_delete_prog_rcu);
        } else {
                list_add_rcu(&prog->link, &head->plist);
Simple merge
Simple merge
Simple merge
index 95dc997873e8e28f0aa4bd784ad5c219563a07ff,3684153cd8a9e1dfc680bcabf3c13e4fba2f507e..66d4e009915831a1c5bb992fe19a4e2c55e1e490
@@@ -113,10 -112,13 +119,13 @@@ static void mall_destroy(struct tcf_pro
        if (!head)
                return;
  
 -      if (tc_should_offload(dev, head->flags))
 +      if (!tc_skip_hw(head->flags))
                mall_destroy_hw_filter(tp, head, (unsigned long) head);
  
-       call_rcu(&head->rcu, mall_destroy_rcu);
+       if (tcf_exts_get_net(&head->exts))
+               call_rcu(&head->rcu, mall_destroy_rcu);
+       else
+               __mall_destroy(head);
  }
  
  static void *mall_get(struct tcf_proto *tp, u32 handle)
Simple merge
index 2737b71854c97a6315c498ec5c143de854d695d1,b58eccb21f039b676d051507ae971f6fc601654d..ac152b4f4247d61d1761886352a93cb03b585cbf
@@@ -589,8 -590,10 +591,11 @@@ static void u32_clear_hnode(struct tcf_
                                         rtnl_dereference(n->next));
                        tcf_unbind_filter(tp, &n->res);
                        u32_remove_hw_knode(tp, n->handle);
-                       call_rcu(&n->rcu, u32_delete_key_freepf_rcu);
 +                      idr_remove_ext(&ht->handle_idr, n->handle);
+                       if (tcf_exts_get_net(&n->exts))
+                               call_rcu(&n->rcu, u32_delete_key_freepf_rcu);
+                       else
+                               u32_destroy_key(n->tp, n, true);
                }
        }
  }
Simple merge
Simple merge