[PATCH NET-PREV 20/51] ppp: Use __register_netdevice in .newlink

Kirill Tkhai posted 51 patches 9 months ago
[PATCH NET-PREV 20/51] ppp: Use __register_netdevice in .newlink
Posted by Kirill Tkhai 9 months ago
The objective is to conform .newlink with its callers,
which already assign nd_lock (and matches master nd_lock
if there is one).

Signed-off-by: Kirill Tkhai <tkhai@ya.ru>
---
 drivers/net/ppp/ppp_generic.c |   13 ++++++++++++-
 1 file changed, 12 insertions(+), 1 deletion(-)

diff --git a/drivers/net/ppp/ppp_generic.c b/drivers/net/ppp/ppp_generic.c
index eb9acfcaeb09..c094bc5e6d8f 100644
--- a/drivers/net/ppp/ppp_generic.c
+++ b/drivers/net/ppp/ppp_generic.c
@@ -1216,7 +1216,7 @@ static int ppp_unit_register(struct ppp *ppp, int unit, bool ifname_is_set)
 
 	mutex_unlock(&pn->all_ppp_mutex);
 
-	ret = register_netdevice(ppp->dev);
+	ret = __register_netdevice(ppp->dev);
 	if (ret < 0)
 		goto err_unit;
 
@@ -3331,6 +3331,7 @@ static int ppp_create_interface(struct net *net, struct file *file, int *unit)
 		.unit = *unit,
 		.ifname_is_set = false,
 	};
+	struct nd_lock *nd_lock;
 	struct net_device *dev;
 	struct ppp *ppp;
 	int err;
@@ -3343,7 +3344,13 @@ static int ppp_create_interface(struct net *net, struct file *file, int *unit)
 	dev_net_set(dev, net);
 	dev->rtnl_link_ops = &ppp_link_ops;
 
+	if (!attach_new_nd_lock(dev)) {
+		err = -ENOMEM;
+		goto err_free;
+	}
+
 	rtnl_lock();
+	lock_netdev(dev, &nd_lock);
 
 	err = ppp_dev_configure(net, dev, &conf);
 	if (err < 0)
@@ -3351,12 +3358,16 @@ static int ppp_create_interface(struct net *net, struct file *file, int *unit)
 	ppp = netdev_priv(dev);
 	*unit = ppp->file.index;
 
+	unlock_netdev(nd_lock);
 	rtnl_unlock();
 
 	return 0;
 
 err_dev:
+	detach_nd_lock(dev);
+	unlock_netdev(nd_lock);
 	rtnl_unlock();
+err_free:
 	free_netdev(dev);
 err:
 	return err;