]> err.no Git - linux-2.6/blobdiff - net/ipv6/ip6mr.c
video: sh7760fb: SH7760/SH7763 LCDC framebuffer driver
[linux-2.6] / net / ipv6 / ip6mr.c
index 2dd832592a310fdf981f6c929034d12ca9075b7e..095bc453ff4c29e0f8ae7b19a2017b8d4fa0c731 100644 (file)
@@ -443,6 +443,7 @@ static struct net_device *ip6mr_reg_vif(void)
        if (dev_open(dev))
                goto failure;
 
+       dev_hold(dev);
        return dev;
 
 failure:
@@ -616,6 +617,7 @@ static int mif6_add(struct mif6ctl *vifc, int mrtsock)
                err = dev_set_allmulti(dev, 1);
                if (err) {
                        unregister_netdevice(dev);
+                       dev_put(dev);
                        return err;
                }
                break;
@@ -624,10 +626,11 @@ static int mif6_add(struct mif6ctl *vifc, int mrtsock)
                dev = dev_get_by_index(&init_net, vifc->mif6c_pifi);
                if (!dev)
                        return -EADDRNOTAVAIL;
-               dev_put(dev);
                err = dev_set_allmulti(dev, 1);
-               if (err)
+               if (err) {
+                       dev_put(dev);
                        return err;
+               }
                break;
        default:
                return -EINVAL;
@@ -651,7 +654,6 @@ static int mif6_add(struct mif6ctl *vifc, int mrtsock)
 
        /* And finish update writing critical data */
        write_lock_bh(&mrt_lock);
-       dev_hold(dev);
        v->dev = dev;
 #ifdef CONFIG_IPV6_PIMSM_V2
        if (v->flags & MIFF_REGISTER)
@@ -933,7 +935,7 @@ static int ip6mr_device_event(struct notifier_block *this,
        struct mif_device *v;
        int ct;
 
-       if (dev_net(dev) != &init_net)
+       if (!net_eq(dev_net(dev), &init_net))
                return NOTIFY_DONE;
 
        if (event != NETDEV_UNREGISTER)