On Fri, Jul 17, 2015 at 09:16:14PM +0300, Denys Fedoryshchenko wrote: > Probably my knowledge of kernel is not sufficient, but i will try few > approaches. > One of them to add to pppoe_unbind_sock_work: > > pppox_unbind_sock(sk); > +/* Signal the death of the socket. */ > +sk->sk_state = PPPOX_DEAD; > I don't believe this will fix anything. pppox_unbind_sock() already sets sk->sk_state when necessary.
> I will wait first, to make sure this patch was causing kernel panic (it > needs 24h testing cycle), then i will try this fix. > I suspect the problem goes with actions performed on the underlying interface (MAC address, MTU or link state update). This triggers pppoe_flush_dev(), which cleans up the device without announcing it in sk->sk_state. Can you pleas try the following patch? --- diff --git a/drivers/net/ppp/pppoe.c b/drivers/net/ppp/pppoe.c index 3837ae3..2ed7506 100644 --- a/drivers/net/ppp/pppoe.c +++ b/drivers/net/ppp/pppoe.c @@ -313,7 +313,6 @@ static void pppoe_flush_dev(struct net_device *dev) if (po->pppoe_dev == dev && sk->sk_state & (PPPOX_CONNECTED | PPPOX_BOUND | PPPOX_ZOMBIE)) { pppox_unbind_sock(sk); - sk->sk_state = PPPOX_ZOMBIE; sk->sk_state_change(sk); po->pppoe_dev = NULL; dev_put(dev); -- To unsubscribe from this list: send the line "unsubscribe netdev" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html