net: vrf: determine the dst using the original ifindex for multicast
[platform/kernel/linux-rpi.git] / drivers / net / vrf.c
index badf6f0..bdb3a76 100644 (file)
@@ -159,13 +159,13 @@ static void vrf_get_stats64(struct net_device *dev,
 
                dstats = per_cpu_ptr(dev->dstats, i);
                do {
-                       start = u64_stats_fetch_begin_irq(&dstats->syncp);
+                       start = u64_stats_fetch_begin(&dstats->syncp);
                        tbytes = dstats->tx_bytes;
                        tpkts = dstats->tx_pkts;
                        tdrops = dstats->tx_drps;
                        rbytes = dstats->rx_bytes;
                        rpkts = dstats->rx_pkts;
-               } while (u64_stats_fetch_retry_irq(&dstats->syncp, start));
+               } while (u64_stats_fetch_retry(&dstats->syncp, start));
                stats->tx_bytes += tbytes;
                stats->tx_packets += tpkts;
                stats->tx_dropped += tdrops;
@@ -1385,8 +1385,8 @@ static struct sk_buff *vrf_ip6_rcv(struct net_device *vrf_dev,
 
        /* loopback, multicast & non-ND link-local traffic; do not push through
         * packet taps again. Reset pkt_type for upper layers to process skb.
-        * For strict packets with a source LLA, determine the dst using the
-        * original ifindex.
+        * For non-loopback strict packets, determine the dst using the original
+        * ifindex.
         */
        if (skb->pkt_type == PACKET_LOOPBACK || (need_strict && !is_ndisc)) {
                skb->dev = vrf_dev;
@@ -1395,7 +1395,7 @@ static struct sk_buff *vrf_ip6_rcv(struct net_device *vrf_dev,
 
                if (skb->pkt_type == PACKET_LOOPBACK)
                        skb->pkt_type = PACKET_HOST;
-               else if (ipv6_addr_type(&ipv6_hdr(skb)->saddr) & IPV6_ADDR_LINKLOCAL)
+               else
                        vrf_ip6_input_dst(skb, vrf_dev, orig_iif);
 
                goto out;