Loading net/core/dst.c +2 −2 Original line number Diff line number Diff line Loading @@ -279,11 +279,11 @@ static inline void dst_ifdown(struct dst_entry *dst, struct net_device *dev, if (!unregister) { dst->input = dst->output = dst_discard; } else { dst->dev = init_net.loopback_dev; dst->dev = dst->dev->nd_net->loopback_dev; dev_hold(dst->dev); dev_put(dev); if (dst->neighbour && dst->neighbour->dev == dev) { dst->neighbour->dev = init_net.loopback_dev; dst->neighbour->dev = dst->dev; dev_put(dev); dev_hold(dst->neighbour->dev); } Loading net/ipv4/route.c +3 −2 Original line number Diff line number Diff line Loading @@ -1512,8 +1512,9 @@ static void ipv4_dst_ifdown(struct dst_entry *dst, struct net_device *dev, { struct rtable *rt = (struct rtable *) dst; struct in_device *idev = rt->idev; if (dev != init_net.loopback_dev && idev && idev->dev == dev) { struct in_device *loopback_idev = in_dev_get(init_net.loopback_dev); if (dev != dev->nd_net->loopback_dev && idev && idev->dev == dev) { struct in_device *loopback_idev = in_dev_get(dev->nd_net->loopback_dev); if (loopback_idev) { rt->idev = loopback_idev; in_dev_put(idev); Loading net/ipv4/xfrm4_policy.c +2 −1 Original line number Diff line number Diff line Loading @@ -214,7 +214,8 @@ static void xfrm4_dst_ifdown(struct dst_entry *dst, struct net_device *dev, xdst = (struct xfrm_dst *)dst; if (xdst->u.rt.idev->dev == dev) { struct in_device *loopback_idev = in_dev_get(init_net.loopback_dev); struct in_device *loopback_idev = in_dev_get(dev->nd_net->loopback_dev); BUG_ON(!loopback_idev); do { Loading net/ipv6/route.c +5 −2 Original line number Diff line number Diff line Loading @@ -216,9 +216,12 @@ static void ip6_dst_ifdown(struct dst_entry *dst, struct net_device *dev, { struct rt6_info *rt = (struct rt6_info *)dst; struct inet6_dev *idev = rt->rt6i_idev; struct net_device *loopback_dev = dev->nd_net->loopback_dev; if (dev != init_net.loopback_dev && idev != NULL && idev->dev == dev) { struct inet6_dev *loopback_idev = in6_dev_get(init_net.loopback_dev); if (dev != loopback_dev && idev != NULL && idev->dev == dev) { struct inet6_dev *loopback_idev = in6_dev_get(loopback_dev); if (loopback_idev != NULL) { rt->rt6i_idev = loopback_idev; in6_dev_put(idev); Loading net/ipv6/xfrm6_policy.c +2 −1 Original line number Diff line number Diff line Loading @@ -229,7 +229,8 @@ static void xfrm6_dst_ifdown(struct dst_entry *dst, struct net_device *dev, xdst = (struct xfrm_dst *)dst; if (xdst->u.rt6.rt6i_idev->dev == dev) { struct inet6_dev *loopback_idev = in6_dev_get(init_net.loopback_dev); struct inet6_dev *loopback_idev = in6_dev_get(dev->nd_net->loopback_dev); BUG_ON(!loopback_idev); do { Loading Loading
net/core/dst.c +2 −2 Original line number Diff line number Diff line Loading @@ -279,11 +279,11 @@ static inline void dst_ifdown(struct dst_entry *dst, struct net_device *dev, if (!unregister) { dst->input = dst->output = dst_discard; } else { dst->dev = init_net.loopback_dev; dst->dev = dst->dev->nd_net->loopback_dev; dev_hold(dst->dev); dev_put(dev); if (dst->neighbour && dst->neighbour->dev == dev) { dst->neighbour->dev = init_net.loopback_dev; dst->neighbour->dev = dst->dev; dev_put(dev); dev_hold(dst->neighbour->dev); } Loading
net/ipv4/route.c +3 −2 Original line number Diff line number Diff line Loading @@ -1512,8 +1512,9 @@ static void ipv4_dst_ifdown(struct dst_entry *dst, struct net_device *dev, { struct rtable *rt = (struct rtable *) dst; struct in_device *idev = rt->idev; if (dev != init_net.loopback_dev && idev && idev->dev == dev) { struct in_device *loopback_idev = in_dev_get(init_net.loopback_dev); if (dev != dev->nd_net->loopback_dev && idev && idev->dev == dev) { struct in_device *loopback_idev = in_dev_get(dev->nd_net->loopback_dev); if (loopback_idev) { rt->idev = loopback_idev; in_dev_put(idev); Loading
net/ipv4/xfrm4_policy.c +2 −1 Original line number Diff line number Diff line Loading @@ -214,7 +214,8 @@ static void xfrm4_dst_ifdown(struct dst_entry *dst, struct net_device *dev, xdst = (struct xfrm_dst *)dst; if (xdst->u.rt.idev->dev == dev) { struct in_device *loopback_idev = in_dev_get(init_net.loopback_dev); struct in_device *loopback_idev = in_dev_get(dev->nd_net->loopback_dev); BUG_ON(!loopback_idev); do { Loading
net/ipv6/route.c +5 −2 Original line number Diff line number Diff line Loading @@ -216,9 +216,12 @@ static void ip6_dst_ifdown(struct dst_entry *dst, struct net_device *dev, { struct rt6_info *rt = (struct rt6_info *)dst; struct inet6_dev *idev = rt->rt6i_idev; struct net_device *loopback_dev = dev->nd_net->loopback_dev; if (dev != init_net.loopback_dev && idev != NULL && idev->dev == dev) { struct inet6_dev *loopback_idev = in6_dev_get(init_net.loopback_dev); if (dev != loopback_dev && idev != NULL && idev->dev == dev) { struct inet6_dev *loopback_idev = in6_dev_get(loopback_dev); if (loopback_idev != NULL) { rt->rt6i_idev = loopback_idev; in6_dev_put(idev); Loading
net/ipv6/xfrm6_policy.c +2 −1 Original line number Diff line number Diff line Loading @@ -229,7 +229,8 @@ static void xfrm6_dst_ifdown(struct dst_entry *dst, struct net_device *dev, xdst = (struct xfrm_dst *)dst; if (xdst->u.rt6.rt6i_idev->dev == dev) { struct inet6_dev *loopback_idev = in6_dev_get(init_net.loopback_dev); struct inet6_dev *loopback_idev = in6_dev_get(dev->nd_net->loopback_dev); BUG_ON(!loopback_idev); do { Loading