On Mon, Jun 14, 2004 at 08:28:58PM +1000, herbert wrote:
> On Mon, Jun 14, 2004 at 02:22:16PM +1000, herbert wrote:
> >
> > 1. The code in dst_dev_event relies on the entries with dev in it
> > getting onto the garbage list before it is called. Unfortunately
> > for routing entries, the flushing is done asynchronusly so it is
> > entirely possible for the entries to get onto the garbage list after
> > dst_dev_event has been called twice (DOWN and then UNREGISTER).
>
> Actually this can't happen since fib_netdev_event will do an
> immediate flush. So it's only #2 or IPsec that's a problem.
And even there it's not too bad as it only happens if there are
more than two IPsec dst's in a row, e.g., ESP/IPCOMP.
Here is a patch to do the same loopback_dev hack for child dst's.
I've also taken the liberty to remove the bogus dst->output check.
I've tested it with ESP/IPCOMP and I can confirm that it allows
me to remove my NIC module if when I've got a TCP connection over
it. Without it the removal hangs.
Alexey, if I've missed any subtle piece of logic there, please
scream :)
Cheers,
--
Visit Openswan at http://www.openswan.org/
Email: Herbert Xu ~{PmV>HI~} <herbert@xxxxxxxxxxxxxxxxxxx>
Home Page: http://gondor.apana.org.au/~herbert/
PGP Key: http://gondor.apana.org.au/~herbert/pubkey.txt
p
Description: Text document
|