Re: PROBLEM: 2.6.11-rc2 hangs on bridge shutdown (br0)

From: YOSHIFUJI Hideaki / 吉藤英明
Date: Sun Feb 06 2005 - 00:33:48 EST


In article <20050205210411.7e18b8e6.davem@xxxxxxxxxxxxx> (at Sat, 5 Feb 2005 21:04:11 -0800), "David S. Miller" <davem@xxxxxxxxxxxxx> says:

> On Sun, 06 Feb 2005 13:37:23 +0900 (JST)
> YOSHIFUJI Hideaki / 吉藤英明 <yoshfuji@xxxxxxxxxxxxxx> wrote:
>
> > How about making dst->ops->dev_check() like this:
> >
> > static int inline dst_dev_check(struct dst_entry *dst, struct net_device *dev)
> > {
> > if (dst->ops->dev_check)
> > return dst->ops->dev_check(dst, dev)
> > else
> > return dst->dev == dev;
> > }
>
> Oh I see. That would work, and it seems the simplest, and
> lowest risk fix for this problem.

Well...

Here, lo is going down.
rt->rt6i_dev = lo and rt->rt6i_idev = ethX.
I think we already see dst->dev == dev (==lo) now.
So, I doubt that fix the problem.

The source of problem is entry (*) which still on routing entry,
not on gc list. And, the owner of entry is not routing table but
unicast/anycast address structure(s).
We need to "kill" active address on the other interfaces.

*: rt->rt6i_dev = lo and rt->rt6i_idev = ethX


BTW, I wish we could shut down eth0 during lo is pending...

--yoshfuji


-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/