lkml.org 
[lkml]   [2005]   [Feb]   [6]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    /
    Date
    SubjectRe: PROBLEM: 2.6.11-rc2 hangs on bridge shutdown (br0)
    From
    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~} <herbert@gondor.apana.org.au>
    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 majordomo@vger.kernel.org
    More majordomo info at http://vger.kernel.org/majordomo-info.html
    Please read the FAQ at http://www.tux.org/lkml/

    \
     
     \ /
      Last update: 2005-03-22 14:10    [W:0.021 / U:0.972 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site