Commit 7ca486d0 authored by Xiao Liang's avatar Xiao Liang Committed by Jakub Kicinski
Browse files

rtnetlink: Create link directly in target net namespace



Make rtnl_newlink_create() create device in target namespace directly.
Avoid extra netns change when link netns is provided.

Device drivers has been converted to be aware of link netns, that is not
assuming device netns is and link netns is the same when ops->newlink()
is called.

Signed-off-by: default avatarXiao Liang <shaw.leon@gmail.com>
Reviewed-by: default avatarKuniyuki Iwashima <kuniyu@amazon.com>
Link: https://patch.msgid.link/20250219125039.18024-12-shaw.leon@gmail.com


Signed-off-by: default avatarJakub Kicinski <kuba@kernel.org>
parent 9c0fc091
Loading
Loading
Loading
Loading
+2 −7
Original line number Diff line number Diff line
@@ -3789,8 +3789,8 @@ static int rtnl_newlink_create(struct sk_buff *skb, struct ifinfomsg *ifm,
		name_assign_type = NET_NAME_ENUM;
	}

	dev = rtnl_create_link(link_net ? : tgt_net, ifname,
			       name_assign_type, ops, tb, extack);
	dev = rtnl_create_link(tgt_net, ifname, name_assign_type, ops, tb,
			       extack);
	if (IS_ERR(dev)) {
		err = PTR_ERR(dev);
		goto out;
@@ -3810,11 +3810,6 @@ static int rtnl_newlink_create(struct sk_buff *skb, struct ifinfomsg *ifm,
	err = rtnl_configure_link(dev, ifm, portid, nlh);
	if (err < 0)
		goto out_unregister;
	if (link_net) {
		err = dev_change_net_namespace(dev, tgt_net, ifname);
		if (err < 0)
			goto out_unregister;
	}
	if (tb[IFLA_MASTER]) {
		err = do_set_master(dev, nla_get_u32(tb[IFLA_MASTER]), extack);
		if (err)