On Sat, Feb 05, 2005 at 08:10:44PM -0800, David S. Miller wrote: > > > Alternatively we can > > remove the dst->dev == dev check in dst_dev_event and dst_ifdown > > and move that test down to the individual ifdown functions. > > I think there is a hole in this idea.... maybe. > > If the idea is to scan dst_garbage_list down in ipv6 specific code, > you can't do that since 'dst' objects from every pool in the kernel > get put onto the dst_garbage_list. It is generic.
The idea is to move the check into dst->ops->ifdown. By definition ipv6_dst_ifdown will only see rt6_info entries. So dst_dev_event will become for (dst = dst_garbage_list; dst; dst = dst->next) { dst_ifdown(dst, event != NETDEV_DOWN); } dst_ifdown will become ... do { if (dst->dev == dev && unregister) { ... } dst->ops->ifdown(dst, dev, unregister); } while ((dst = dst->child) && dst->flags & DST_NOHASH); ... Note the extra dev argument to ifdown. ipv6_dst_ifdown will be static void ip6_dst_ifdown(struct dst_entry *dst, struct net_device *dev, int how) { struct rt6_info *rt = (struct rt6_info *)dst; struct inet6_dev *idev = rt->rt6i_idev; if (idev != NULL && idev->dev != &loopback_dev && 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); } } } Cheers, -- Visit Openswan at http://www.openswan.org/ Email: Herbert Xu ~{PmV>HI~} <[EMAIL PROTECTED]> Home Page: http://gondor.apana.org.au/~herbert/ PGP Key: http://gondor.apana.org.au/~herbert/pubkey.txt - To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to [EMAIL PROTECTED] More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/