#define ICMP6_INC_STATS(net, idev, field)      ({ (void)(net); \
                _DEVINC(icmpv6, , idev, field); })
-#define ICMP6_INC_STATS_BH(idev, field)        _DEVINC(icmpv6, _BH, idev, field)
+#define ICMP6_INC_STATS_BH(net, idev, field)   ({ (void)(net); \
+               _DEVINC(icmpv6, _BH, idev, field); })
 
 #define ICMP6MSGOUT_INC_STATS(idev, field) \
        _DEVINC(icmpv6msg, , idev, field +256)
 
 
        if (skb->len < offset + sizeof(*dh) ||
            skb->len < offset + __dccp_basic_hdr_len(dh)) {
-               ICMP6_INC_STATS_BH(__in6_dev_get(skb->dev), ICMP6_MIB_INERRORS);
+               ICMP6_INC_STATS_BH(net, __in6_dev_get(skb->dev),
+                                  ICMP6_MIB_INERRORS);
                return;
        }
 
                        &hdr->saddr, dh->dccph_sport, inet6_iif(skb));
 
        if (sk == NULL) {
-               ICMP6_INC_STATS_BH(__in6_dev_get(skb->dev), ICMP6_MIB_INERRORS);
+               ICMP6_INC_STATS_BH(net, __in6_dev_get(skb->dev),
+                                  ICMP6_MIB_INERRORS);
                return;
        }
 
 
                skb_set_network_header(skb, nh);
        }
 
-       ICMP6_INC_STATS_BH(idev, ICMP6_MIB_INMSGS);
+       ICMP6_INC_STATS_BH(dev_net(dev), idev, ICMP6_MIB_INMSGS);
 
        saddr = &ipv6_hdr(skb)->saddr;
        daddr = &ipv6_hdr(skb)->daddr;
        return 0;
 
 discard_it:
-       ICMP6_INC_STATS_BH(idev, ICMP6_MIB_INERRORS);
+       ICMP6_INC_STATS_BH(dev_net(dev), idev, ICMP6_MIB_INERRORS);
 drop_no_count:
        kfree_skb(skb);
        return 0;
 
                struct inet6_dev *idev = ip6_dst_idev(skb->dst);
 
                ICMP6MSGOUT_INC_STATS_BH(idev, icmp6_hdr(skb)->icmp6_type);
-               ICMP6_INC_STATS_BH(idev, ICMP6_MIB_OUTMSGS);
+               ICMP6_INC_STATS_BH(net, idev, ICMP6_MIB_OUTMSGS);
        }
 
        err = ip6_local_out(skb);
 
 out:
        if (!err) {
                ICMP6MSGOUT_INC_STATS_BH(idev, ICMPV6_MLD2_REPORT);
-               ICMP6_INC_STATS_BH(idev, ICMP6_MIB_OUTMSGS);
+               ICMP6_INC_STATS_BH(net, idev, ICMP6_MIB_OUTMSGS);
                IP6_INC_STATS_BH(net, idev, IPSTATS_MIB_OUTMCASTPKTS);
        } else
                IP6_INC_STATS_BH(net, idev, IPSTATS_MIB_OUTDISCARDS);
 
                        th->dest, &hdr->saddr, th->source, skb->dev->ifindex);
 
        if (sk == NULL) {
-               ICMP6_INC_STATS_BH(__in6_dev_get(skb->dev), ICMP6_MIB_INERRORS);
+               ICMP6_INC_STATS_BH(net, __in6_dev_get(skb->dev),
+                                  ICMP6_MIB_INERRORS);
                return;
        }
 
 
        skb->network_header   = saveip;
        skb->transport_header = savesctp;
        if (!sk) {
-               ICMP6_INC_STATS_BH(idev, ICMP6_MIB_INERRORS);
+               ICMP6_INC_STATS_BH(dev_net(skb->dev), idev, ICMP6_MIB_INERRORS);
                goto out;
        }