Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

net: Add extack argument to rtnl_create_link

Add extack arg to rtnl_create_link and add messages for invalid
number of Tx or Rx queues.

Signed-off-by: David Ahern <dsahern@gmail.com>
Signed-off-by: David S. Miller <davem@davemloft.net>

authored by

David Ahern and committed by
David S. Miller
d0522f1c 0b215b97

+19 -12
+1 -1
drivers/net/can/vxcan.c
··· 207 207 return PTR_ERR(peer_net); 208 208 209 209 peer = rtnl_create_link(peer_net, ifname, name_assign_type, 210 - &vxcan_link_ops, tbp); 210 + &vxcan_link_ops, tbp, extack); 211 211 if (IS_ERR(peer)) { 212 212 put_net(peer_net); 213 213 return PTR_ERR(peer);
+1 -1
drivers/net/geneve.c
··· 1666 1666 1667 1667 memset(tb, 0, sizeof(tb)); 1668 1668 dev = rtnl_create_link(net, name, name_assign_type, 1669 - &geneve_link_ops, tb); 1669 + &geneve_link_ops, tb, NULL); 1670 1670 if (IS_ERR(dev)) 1671 1671 return dev; 1672 1672
+1 -1
drivers/net/veth.c
··· 1253 1253 return PTR_ERR(net); 1254 1254 1255 1255 peer = rtnl_create_link(net, ifname, name_assign_type, 1256 - &veth_link_ops, tbp); 1256 + &veth_link_ops, tbp, extack); 1257 1257 if (IS_ERR(peer)) { 1258 1258 put_net(net); 1259 1259 return PTR_ERR(peer);
+1 -1
drivers/net/vxlan.c
··· 3749 3749 memset(&tb, 0, sizeof(tb)); 3750 3750 3751 3751 dev = rtnl_create_link(net, name, name_assign_type, 3752 - &vxlan_link_ops, tb); 3752 + &vxlan_link_ops, tb, NULL); 3753 3753 if (IS_ERR(dev)) 3754 3754 return dev; 3755 3755
+2 -1
include/net/rtnetlink.h
··· 159 159 struct net_device *rtnl_create_link(struct net *net, const char *ifname, 160 160 unsigned char name_assign_type, 161 161 const struct rtnl_link_ops *ops, 162 - struct nlattr *tb[]); 162 + struct nlattr *tb[], 163 + struct netlink_ext_ack *extack); 163 164 int rtnl_delete_link(struct net_device *dev); 164 165 int rtnl_configure_link(struct net_device *dev, const struct ifinfomsg *ifm); 165 166
+12 -6
net/core/rtnetlink.c
··· 2885 2885 } 2886 2886 EXPORT_SYMBOL(rtnl_configure_link); 2887 2887 2888 - struct net_device *rtnl_create_link(struct net *net, 2889 - const char *ifname, unsigned char name_assign_type, 2890 - const struct rtnl_link_ops *ops, struct nlattr *tb[]) 2888 + struct net_device *rtnl_create_link(struct net *net, const char *ifname, 2889 + unsigned char name_assign_type, 2890 + const struct rtnl_link_ops *ops, 2891 + struct nlattr *tb[], 2892 + struct netlink_ext_ack *extack) 2891 2893 { 2892 2894 struct net_device *dev; 2893 2895 unsigned int num_tx_queues = 1; ··· 2905 2903 else if (ops->get_num_rx_queues) 2906 2904 num_rx_queues = ops->get_num_rx_queues(); 2907 2905 2908 - if (num_tx_queues < 1 || num_tx_queues > 4096) 2906 + if (num_tx_queues < 1 || num_tx_queues > 4096) { 2907 + NL_SET_ERR_MSG(extack, "Invalid number of transmit queues"); 2909 2908 return ERR_PTR(-EINVAL); 2909 + } 2910 2910 2911 - if (num_rx_queues < 1 || num_rx_queues > 4096) 2911 + if (num_rx_queues < 1 || num_rx_queues > 4096) { 2912 + NL_SET_ERR_MSG(extack, "Invalid number of receive queues"); 2912 2913 return ERR_PTR(-EINVAL); 2914 + } 2913 2915 2914 2916 dev = alloc_netdev_mqs(ops->priv_size, ifname, name_assign_type, 2915 2917 ops->setup, num_tx_queues, num_rx_queues); ··· 3169 3163 } 3170 3164 3171 3165 dev = rtnl_create_link(link_net ? : dest_net, ifname, 3172 - name_assign_type, ops, tb); 3166 + name_assign_type, ops, tb, extack); 3173 3167 if (IS_ERR(dev)) { 3174 3168 err = PTR_ERR(dev); 3175 3169 goto out;
+1 -1
net/ipv4/ip_gre.c
··· 1601 1601 memset(&tb, 0, sizeof(tb)); 1602 1602 1603 1603 dev = rtnl_create_link(net, name, name_assign_type, 1604 - &ipgre_tap_ops, tb); 1604 + &ipgre_tap_ops, tb, NULL); 1605 1605 if (IS_ERR(dev)) 1606 1606 return dev; 1607 1607