]> www.infradead.org Git - users/hch/misc.git/commitdiff
rtnetlink: Create link directly in target net namespace
authorXiao Liang <shaw.leon@gmail.com>
Wed, 19 Feb 2025 12:50:37 +0000 (20:50 +0800)
committerJakub Kicinski <kuba@kernel.org>
Fri, 21 Feb 2025 23:28:03 +0000 (15:28 -0800)
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: Xiao Liang <shaw.leon@gmail.com>
Reviewed-by: Kuniyuki Iwashima <kuniyu@amazon.com>
Link: https://patch.msgid.link/20250219125039.18024-12-shaw.leon@gmail.com
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
net/core/rtnetlink.c

index e980481bdd286bbd4b089c2114e5e2def1615866..b52e610e157e9d5a5a1d7413ef77dccb2d0e2440 100644 (file)
@@ -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)