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

Configure Feed

Select the types of activity you want to include in your feed.

team: use netdev_from_priv()

Use the new netdev_from_priv() helper to access the net device from
struct team.

Signed-off-by: Qingfang Deng <dqfext@gmail.com>
Link: https://patch.msgid.link/20260320075605.490832-2-dqfext@gmail.com
Signed-off-by: Jakub Kicinski <kuba@kernel.org>

authored by

Qingfang Deng and committed by
Jakub Kicinski
9027497a eb370113

+43 -37
+42 -35
drivers/net/team/team_core.c
··· 66 66 static int team_port_set_team_dev_addr(struct team *team, 67 67 struct team_port *port) 68 68 { 69 - return __set_port_dev_addr(port->dev, team->dev->dev_addr); 69 + return __set_port_dev_addr(port->dev, netdev_from_priv(team)->dev_addr); 70 70 } 71 71 72 72 int team_modeop_port_enter(struct team *team, struct team_port *port) ··· 591 591 static int team_change_mode(struct team *team, const char *kind) 592 592 { 593 593 const struct team_mode *new_mode; 594 - struct net_device *dev = team->dev; 594 + struct net_device *dev = netdev_from_priv(team); 595 595 int err; 596 596 597 597 if (!list_empty(&team->port_list)) { ··· 642 642 rtnl_unlock(); 643 643 return; 644 644 } 645 - call_netdevice_notifiers(NETDEV_NOTIFY_PEERS, team->dev); 645 + call_netdevice_notifiers(NETDEV_NOTIFY_PEERS, netdev_from_priv(team)); 646 646 rtnl_unlock(); 647 647 if (val) 648 648 schedule_delayed_work(&team->notify_peers.dw, ··· 651 651 652 652 static void team_notify_peers(struct team *team) 653 653 { 654 - if (!team->notify_peers.count || !netif_running(team->dev)) 654 + if (!team->notify_peers.count || !netif_running(netdev_from_priv(team))) 655 655 return; 656 656 atomic_add(team->notify_peers.count, &team->notify_peers.count_pending); 657 657 schedule_delayed_work(&team->notify_peers.dw, 0); ··· 688 688 rtnl_unlock(); 689 689 return; 690 690 } 691 - call_netdevice_notifiers(NETDEV_RESEND_IGMP, team->dev); 691 + call_netdevice_notifiers(NETDEV_RESEND_IGMP, netdev_from_priv(team)); 692 692 rtnl_unlock(); 693 693 if (val) 694 694 schedule_delayed_work(&team->mcast_rejoin.dw, ··· 697 697 698 698 static void team_mcast_rejoin(struct team *team) 699 699 { 700 - if (!team->mcast_rejoin.count || !netif_running(team->dev)) 700 + if (!team->mcast_rejoin.count || !netif_running(netdev_from_priv(team))) 701 701 return; 702 702 atomic_add(team->mcast_rejoin.count, &team->mcast_rejoin.count_pending); 703 703 schedule_delayed_work(&team->mcast_rejoin.dw, 0); ··· 756 756 u64_stats_inc(&pcpu_stats->rx_multicast); 757 757 u64_stats_update_end(&pcpu_stats->syncp); 758 758 759 - skb->dev = team->dev; 759 + skb->dev = netdev_from_priv(team); 760 760 } else if (res == RX_HANDLER_EXACT) { 761 761 this_cpu_inc(team->pcpu_stats->rx_nohandler); 762 762 } else { ··· 774 774 static int team_queue_override_init(struct team *team) 775 775 { 776 776 struct list_head *listarr; 777 - unsigned int queue_cnt = team->dev->num_tx_queues - 1; 777 + unsigned int queue_cnt = netdev_from_priv(team)->num_tx_queues - 1; 778 778 unsigned int i; 779 779 780 780 if (!queue_cnt) ··· 868 868 } 869 869 if (enabled == team->queue_override_enabled) 870 870 return; 871 - netdev_dbg(team->dev, "%s queue override\n", 871 + netdev_dbg(netdev_from_priv(team), "%s queue override\n", 872 872 enabled ? "Enabling" : "Disabling"); 873 873 team->queue_override_enabled = enabled; 874 874 } ··· 984 984 { 985 985 int err = 0; 986 986 987 - dev_hold(team->dev); 987 + dev_hold(netdev_from_priv(team)); 988 988 if (team->ops.port_enter) { 989 989 err = team->ops.port_enter(team, port); 990 990 if (err) { 991 - netdev_err(team->dev, "Device %s failed to enter team mode\n", 991 + netdev_err(netdev_from_priv(team), 992 + "Device %s failed to enter team mode\n", 992 993 port->dev->name); 993 994 goto err_port_enter; 994 995 } ··· 998 997 return 0; 999 998 1000 999 err_port_enter: 1001 - dev_put(team->dev); 1000 + dev_put(netdev_from_priv(team)); 1002 1001 1003 1002 return err; 1004 1003 } ··· 1007 1006 { 1008 1007 if (team->ops.port_leave) 1009 1008 team->ops.port_leave(team, port); 1010 - dev_put(team->dev); 1009 + dev_put(netdev_from_priv(team)); 1011 1010 } 1012 1011 1013 1012 #ifdef CONFIG_NET_POLL_CONTROLLER ··· 1031 1030 1032 1031 static int team_port_enable_netpoll(struct team_port *port) 1033 1032 { 1034 - if (!port->team->dev->npinfo) 1033 + if (!netdev_from_priv(port->team)->npinfo) 1035 1034 return 0; 1036 1035 1037 1036 return __team_port_enable_netpoll(port); ··· 1065 1064 1066 1065 lag_upper_info.tx_type = team->mode->lag_tx_type; 1067 1066 lag_upper_info.hash_type = NETDEV_LAG_HASH_UNKNOWN; 1068 - err = netdev_master_upper_dev_link(port->dev, team->dev, NULL, 1069 - &lag_upper_info, extack); 1067 + err = netdev_master_upper_dev_link(port->dev, netdev_from_priv(team), 1068 + NULL, &lag_upper_info, extack); 1070 1069 if (err) 1071 1070 return err; 1072 1071 port->dev->priv_flags |= IFF_TEAM_PORT; ··· 1075 1074 1076 1075 static void team_upper_dev_unlink(struct team *team, struct team_port *port) 1077 1076 { 1078 - netdev_upper_dev_unlink(port->dev, team->dev); 1077 + netdev_upper_dev_unlink(port->dev, netdev_from_priv(team)); 1079 1078 port->dev->priv_flags &= ~IFF_TEAM_PORT; 1080 1079 } 1081 1080 ··· 1086 1085 static int team_port_add(struct team *team, struct net_device *port_dev, 1087 1086 struct netlink_ext_ack *extack) 1088 1087 { 1089 - struct net_device *dev = team->dev; 1088 + struct net_device *dev = netdev_from_priv(team); 1090 1089 struct team_port *port; 1091 1090 char *portname = port_dev->name; 1092 1091 int err; ··· 1248 1247 port->index = -1; 1249 1248 list_add_tail_rcu(&port->list, &team->port_list); 1250 1249 team_port_enable(team, port); 1251 - netdev_compute_master_upper_features(team->dev, true); 1250 + netdev_compute_master_upper_features(dev, true); 1252 1251 __team_port_change_port_added(port, !!netif_oper_up(port_dev)); 1253 1252 __team_options_change_check(team); 1254 1253 ··· 1293 1292 1294 1293 static int team_port_del(struct team *team, struct net_device *port_dev, bool unregister) 1295 1294 { 1296 - struct net_device *dev = team->dev; 1295 + struct net_device *dev = netdev_from_priv(team); 1297 1296 struct team_port *port; 1298 1297 char *portname = port_dev->name; 1299 1298 ··· 1338 1337 } 1339 1338 kfree_rcu(port, rcu); 1340 1339 netdev_info(dev, "Port device %s removed\n", portname); 1341 - netdev_compute_master_upper_features(team->dev, true); 1340 + netdev_compute_master_upper_features(dev, true); 1342 1341 1343 1342 return 0; 1344 1343 } ··· 1507 1506 1508 1507 if (port->queue_id == new_queue_id) 1509 1508 return 0; 1510 - if (new_queue_id >= team->dev->real_num_tx_queues) 1509 + if (new_queue_id >= netdev_from_priv(team)->real_num_tx_queues) 1511 1510 return -EINVAL; 1512 1511 team_queue_override_port_change_queue_id(team, port, new_queue_id); 1513 1512 return 0; ··· 1588 1587 int i; 1589 1588 int err; 1590 1589 1591 - team->dev = dev; 1592 1590 team_set_no_mode(team); 1593 1591 team->notifier_ctx = false; 1594 1592 ··· 2256 2256 2257 2257 static void team_nl_team_put(struct team *team) 2258 2258 { 2259 - dev_put(team->dev); 2259 + dev_put(netdev_from_priv(team)); 2260 2260 } 2261 2261 2262 2262 typedef int team_nl_send_func_t(struct sk_buff *skb, ··· 2264 2264 2265 2265 static int team_nl_send_unicast(struct sk_buff *skb, struct team *team, u32 portid) 2266 2266 { 2267 - return genlmsg_unicast(dev_net(team->dev), skb, portid); 2267 + return genlmsg_unicast(dev_net(netdev_from_priv(team)), skb, portid); 2268 2268 } 2269 2269 2270 2270 static int team_nl_fill_one_option_get(struct sk_buff *skb, struct team *team, ··· 2393 2393 return -EMSGSIZE; 2394 2394 } 2395 2395 2396 - if (nla_put_u32(skb, TEAM_ATTR_TEAM_IFINDEX, team->dev->ifindex)) 2396 + if (nla_put_u32(skb, TEAM_ATTR_TEAM_IFINDEX, 2397 + netdev_from_priv(team)->ifindex)) 2397 2398 goto nla_put_failure; 2398 2399 option_list = nla_nest_start_noflag(skb, TEAM_ATTR_LIST_OPTION); 2399 2400 if (!option_list) ··· 2682 2681 return -EMSGSIZE; 2683 2682 } 2684 2683 2685 - if (nla_put_u32(skb, TEAM_ATTR_TEAM_IFINDEX, team->dev->ifindex)) 2684 + if (nla_put_u32(skb, TEAM_ATTR_TEAM_IFINDEX, 2685 + netdev_from_priv(team)->ifindex)) 2686 2686 goto nla_put_failure; 2687 2687 port_list = nla_nest_start_noflag(skb, TEAM_ATTR_LIST_PORT); 2688 2688 if (!port_list) ··· 2784 2782 static int team_nl_send_multicast(struct sk_buff *skb, 2785 2783 struct team *team, u32 portid) 2786 2784 { 2787 - return genlmsg_multicast_netns(&team_nl_family, dev_net(team->dev), 2785 + return genlmsg_multicast_netns(&team_nl_family, 2786 + dev_net(netdev_from_priv(team)), 2788 2787 skb, 0, 0, GFP_KERNEL); 2789 2788 } 2790 2789 ··· 2830 2827 } 2831 2828 err = team_nl_send_event_options_get(team, &sel_opt_inst_list); 2832 2829 if (err && err != -ESRCH) 2833 - netdev_warn(team->dev, "Failed to send options change via netlink (err %d)\n", 2830 + netdev_warn(netdev_from_priv(team), 2831 + "Failed to send options change via netlink (err %d)\n", 2834 2832 err); 2835 2833 } 2836 2834 ··· 2860 2856 send_event: 2861 2857 err = team_nl_send_event_port_get(port->team, port); 2862 2858 if (err && err != -ESRCH) 2863 - netdev_warn(port->team->dev, "Failed to send port change of device %s via netlink (err %d)\n", 2859 + netdev_warn(netdev_from_priv(port->team), 2860 + "Failed to send port change of device %s via netlink (err %d)\n", 2864 2861 port->dev->name, err); 2865 2862 2866 2863 } ··· 2883 2878 } 2884 2879 2885 2880 if (team_linkup) 2886 - netif_carrier_on(team->dev); 2881 + netif_carrier_on(netdev_from_priv(team)); 2887 2882 else 2888 - netif_carrier_off(team->dev); 2883 + netif_carrier_off(netdev_from_priv(team)); 2889 2884 } 2890 2885 2891 2886 static void __team_port_change_check(struct team_port *port, bool linkup) ··· 2944 2939 !!netif_oper_up(port->dev)); 2945 2940 break; 2946 2941 case NETDEV_UNREGISTER: 2947 - team_del_slave_on_unregister(port->team->dev, dev); 2942 + team_del_slave_on_unregister(netdev_from_priv(port->team), 2943 + dev); 2948 2944 break; 2949 2945 case NETDEV_FEAT_CHANGE: 2950 2946 if (!port->team->notifier_ctx) { 2951 2947 port->team->notifier_ctx = true; 2952 - netdev_compute_master_upper_features(port->team->dev, true); 2948 + netdev_compute_master_upper_features(netdev_from_priv(port->team), 2949 + true); 2953 2950 port->team->notifier_ctx = false; 2954 2951 } 2955 2952 break; ··· 2965 2958 return NOTIFY_BAD; 2966 2959 case NETDEV_RESEND_IGMP: 2967 2960 /* Propagate to master device */ 2968 - call_netdevice_notifiers(event, port->team->dev); 2961 + call_netdevice_notifiers(event, netdev_from_priv(port->team)); 2969 2962 break; 2970 2963 } 2971 2964 return NOTIFY_DONE;
+1 -2
include/linux/if_team.h
··· 186 186 #define TEAM_MODE_PRIV_SIZE (sizeof(long) * TEAM_MODE_PRIV_LONGS) 187 187 188 188 struct team { 189 - struct net_device *dev; /* associated netdevice */ 190 189 struct team_pcpu_stats __percpu *pcpu_stats; 191 190 192 191 const struct header_ops *header_ops_cache; ··· 231 232 skb_set_queue_mapping(skb, qdisc_skb_cb(skb)->slave_dev_queue_mapping); 232 233 233 234 skb->dev = port->dev; 234 - if (unlikely(netpoll_tx_running(team->dev))) { 235 + if (unlikely(netpoll_tx_running(netdev_from_priv(team)))) { 235 236 team_netpoll_send_skb(port, skb); 236 237 return 0; 237 238 }