--- x/net/lapb/lapb_iface.c +++ y/net/lapb/lapb_iface.c @@ -457,6 +457,7 @@ static int lapb_device_event(struct noti { struct net_device *dev = netdev_notifier_info_to_dev(ptr); struct lapb_cb *lapb; + int estab = 0; if (!net_eq(dev_net(dev), &init_net)) return NOTIFY_DONE; @@ -482,7 +483,7 @@ static int lapb_device_event(struct noti } else { if (lapb->state == LAPB_STATE_0) { lapb->state = LAPB_STATE_1; - lapb_establish_data_link(lapb); + estab = 1; } } } @@ -509,7 +510,7 @@ static int lapb_device_event(struct noti } else { if (lapb->state == LAPB_STATE_0) { lapb->state = LAPB_STATE_1; - lapb_establish_data_link(lapb); + estab = 1; } } } else { @@ -525,6 +526,8 @@ static int lapb_device_event(struct noti } spin_unlock_bh(&lapb->lock); + if (estab) + lapb_establish_data_link(lapb); lapb_put(lapb); return NOTIFY_DONE; }