static int pndisc_constructor(struct pneigh_entry *n)
 {
        struct in6_addr *addr = (struct in6_addr *)&n->key;
-       struct in6_addr maddr;
        struct net_device *dev = n->dev;
+       struct in6_addr maddr;
 
-       if (!dev || !__in6_dev_get(dev))
+       if (!dev)
                return -EINVAL;
+
        addrconf_addr_solict_mult(addr, &maddr);
-       ipv6_dev_mc_inc(dev, &maddr);
-       return 0;
+       return ipv6_dev_mc_inc(dev, &maddr);
 }
 
 static void pndisc_destructor(struct pneigh_entry *n)
 {
        struct in6_addr *addr = (struct in6_addr *)&n->key;
-       struct in6_addr maddr;
        struct net_device *dev = n->dev;
+       struct in6_addr maddr;
 
-       if (!dev || !__in6_dev_get(dev))
+       if (!dev)
                return;
+
        addrconf_addr_solict_mult(addr, &maddr);
        ipv6_dev_mc_dec(dev, &maddr);
 }