vrf: use dev_replace_track() for better tracking
[linux-block.git] / drivers / net / vrf.c
index 131c745dc7010b1653b937e87c7f7f5a67e3460d..dbfa124d1c1c03c768ddeae6f2fc7a06166a20d4 100644 (file)
@@ -814,9 +814,9 @@ static void vrf_rt6_release(struct net_device *dev, struct net_vrf *vrf)
         */
        if (rt6) {
                dst = &rt6->dst;
-               dev_put(dst->dev);
+               dev_replace_track(dst->dev, net->loopback_dev,
+                                 &dst->dev_tracker, GFP_KERNEL);
                dst->dev = net->loopback_dev;
-               dev_hold(dst->dev);
                dst_release(dst);
        }
 }
@@ -1061,9 +1061,9 @@ static void vrf_rtable_release(struct net_device *dev, struct net_vrf *vrf)
         */
        if (rth) {
                dst = &rth->dst;
-               dev_put(dst->dev);
+               dev_replace_track(dst->dev, net->loopback_dev,
+                                 &dst->dev_tracker, GFP_KERNEL);
                dst->dev = net->loopback_dev;
-               dev_hold(dst->dev);
                dst_release(dst);
        }
 }