diff --git a/drivers/net/ppp/ppp_generic.c b/drivers/net/ppp/ppp_generic.c index b88886f0d103..b6bc2dbf1812 100644 --- a/drivers/net/ppp/ppp_generic.c +++ b/drivers/net/ppp/ppp_generic.c @@ -2788,6 +2788,8 @@ static struct ppp *ppp_create_interface(struct net *net, int unit, ppp->file.index = unit; sprintf(dev->name, "ppp%d", unit); + mutex_unlock(&pn->all_ppp_mutex); + ret = register_netdevice(dev); if (ret != 0) { /* register_netdevice() may have called ppp_dev_init() @@ -2796,6 +2798,7 @@ static struct ppp *ppp_create_interface(struct net *net, int unit, */ if (dev->qdisc_tx_busylock) ppp_dev_priv_destructor(dev); + mutex_lock(&pn->all_ppp_mutex); unit_put(&pn->units_idr, unit); netdev_err(ppp->dev, "PPP: couldn't register device %s (%d)\n", dev->name, ret); @@ -2803,7 +2806,6 @@ static struct ppp *ppp_create_interface(struct net *net, int unit, } atomic_inc(&ppp_unit_count); - mutex_unlock(&pn->all_ppp_mutex); rtnl_unlock(); *retp = 0;