OSDN Git Service

Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net
authorDavid S. Miller <davem@davemloft.net>
Fri, 28 Jun 2019 04:06:39 +0000 (21:06 -0700)
committerDavid S. Miller <davem@davemloft.net>
Fri, 28 Jun 2019 04:06:39 +0000 (21:06 -0700)
The new route handling in ip_mc_finish_output() from 'net' overlapped
with the new support for returning congestion notifications from BPF
programs.

In order to handle this I had to take the dev_loopback_xmit() calls
out of the switch statement.

The aquantia driver conflicts were simple overlapping changes.

Signed-off-by: David S. Miller <davem@davemloft.net>
25 files changed:
1  2 
MAINTAINERS
arch/arm64/boot/dts/freescale/fsl-ls1028a.dtsi
drivers/net/bonding/bond_main.c
drivers/net/dsa/microchip/ksz_common.c
drivers/net/ethernet/aquantia/atlantic/aq_filters.c
drivers/net/ethernet/aquantia/atlantic/aq_nic.c
drivers/net/ethernet/aquantia/atlantic/aq_nic.h
drivers/net/ethernet/aquantia/atlantic/hw_atl/hw_atl_b0.c
drivers/net/ethernet/cadence/macb_main.c
drivers/net/ethernet/stmicro/stmmac/stmmac_main.c
drivers/net/team/team.c
drivers/net/vrf.c
drivers/scsi/qedi/qedi_main.c
fs/afs/internal.h
include/net/ip6_route.h
include/net/route.h
include/net/tls.h
net/ipv4/ip_output.c
net/ipv4/route.c
net/ipv6/ip6_output.c
net/ipv6/route.c
net/packet/af_packet.c
net/packet/internal.h
net/smc/af_smc.c
net/tipc/netlink_compat.c

diff --cc MAINTAINERS
Simple merge
Simple merge
@@@ -126,8 -126,7 +126,9 @@@ void aq_nic_cfg_start(struct aq_nic_s *
  
        cfg->link_speed_msk &= cfg->aq_hw_caps->link_speed_msk;
        cfg->features = cfg->aq_hw_caps->hw_features;
 +      cfg->is_vlan_rx_strip = !!(cfg->features & NETIF_F_HW_VLAN_CTAG_RX);
 +      cfg->is_vlan_tx_insert = !!(cfg->features & NETIF_F_HW_VLAN_CTAG_TX);
+       cfg->is_vlan_force_promisc = true;
  }
  
  static int aq_nic_update_link_status(struct aq_nic_s *self)
@@@ -35,8 -35,7 +35,9 @@@ struct aq_nic_cfg_s 
        u32 flow_control;
        u32 link_speed_msk;
        u32 wol;
 +      u8 is_vlan_rx_strip;
 +      u8 is_vlan_tx_insert;
+       bool is_vlan_force_promisc;
        u16 is_mc_list_enabled;
        u16 mc_list_count;
        bool is_autoneg;
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
@@@ -327,18 -318,27 +327,35 @@@ static int ip_finish_output(struct net 
  static int ip_mc_finish_output(struct net *net, struct sock *sk,
                               struct sk_buff *skb)
  {
-       int ret;
+       struct rtable *new_rt;
 -      int ret;
++      bool do_cn = false;
++      int ret, err;
  
        ret = BPF_CGROUP_RUN_PROG_INET_EGRESS(sk, skb);
 -      if (ret) {
 +      switch (ret) {
-       case NET_XMIT_SUCCESS:
-               return dev_loopback_xmit(net, sk, skb);
 +      case NET_XMIT_CN:
-               return dev_loopback_xmit(net, sk, skb) ? : ret;
++              do_cn = true;
++              /* fall through */
++      case NET_XMIT_SUCCESS:
++              break;
 +      default:
                kfree_skb(skb);
                return ret;
        }
 -      return dev_loopback_xmit(net, sk, skb);
+       /* Reset rt_iif so that inet_iif() will return skb->skb_iif. Setting
+        * this to non-zero causes ipi_ifindex in in_pktinfo to be overwritten,
+        * see ipv4_pktinfo_prepare().
+        */
+       new_rt = rt_dst_clone(net->loopback_dev, skb_rtable(skb));
+       if (new_rt) {
+               new_rt->rt_iif = 0;
+               skb_dst_drop(skb);
+               skb_dst_set(skb, &new_rt->dst);
+       }
++      err = dev_loopback_xmit(net, sk, skb);
++      return (do_cn && err) ? ret : err;
  }
  
  int ip_mc_output(struct net *net, struct sock *sk, struct sk_buff *skb)
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge