]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
netkit: Set IFLA_NETKIT_PEER_INFO to netkit_link_ops.peer_type.
authorKuniyuki Iwashima <kuniyu@amazon.com>
Fri, 8 Nov 2024 00:48:21 +0000 (16:48 -0800)
committerJakub Kicinski <kuba@kernel.org>
Tue, 12 Nov 2024 01:26:52 +0000 (17:26 -0800)
For per-netns RTNL, we need to prefetch the peer device's netns.

Let's set rtnl_link_ops.peer_type and accordingly remove duplicated
validation in ->newlink().

Signed-off-by: Kuniyuki Iwashima <kuniyu@amazon.com>
Reviewed-by: Eric Dumazet <edumazet@google.com>
Acked-by: Nikolay Aleksandrov <razor@blackwall.org>
Link: https://patch.msgid.link/20241108004823.29419-9-kuniyu@amazon.com
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
drivers/net/netkit.c

index cd8360b9bbde270e5aba8fa841129211b108862c..bb07725d1c72b1332ec052af190a563456469c5f 100644 (file)
@@ -351,12 +351,7 @@ static int netkit_new_link(struct net *src_net, struct net_device *dev,
                if (data[IFLA_NETKIT_PEER_INFO]) {
                        attr = data[IFLA_NETKIT_PEER_INFO];
                        ifmp = nla_data(attr);
-                       err = rtnl_nla_parse_ifinfomsg(peer_tb, attr, extack);
-                       if (err < 0)
-                               return err;
-                       err = netkit_validate(peer_tb, NULL, extack);
-                       if (err < 0)
-                               return err;
+                       rtnl_nla_parse_ifinfomsg(peer_tb, attr, extack);
                        tbp = peer_tb;
                }
                if (data[IFLA_NETKIT_SCRUB])
@@ -391,9 +386,6 @@ static int netkit_new_link(struct net *src_net, struct net_device *dev,
                return -EOPNOTSUPP;
 
        net = rtnl_link_get_net(src_net, tbp);
-       if (IS_ERR(net))
-               return PTR_ERR(net);
-
        peer = rtnl_create_link(net, ifname, ifname_assign_type,
                                &netkit_link_ops, tbp, extack);
        if (IS_ERR(peer)) {
@@ -978,6 +970,7 @@ static struct rtnl_link_ops netkit_link_ops = {
        .fill_info      = netkit_fill_info,
        .policy         = netkit_policy,
        .validate       = netkit_validate,
+       .peer_type      = IFLA_NETKIT_PEER_INFO,
        .maxtype        = IFLA_NETKIT_MAX,
 };