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

net: bonding: constify and use dev_addr_set()

Commit 406f42fa0d3c ("net-next: When a bond have a massive amount
of VLANs...") introduced a rbtree for faster Ethernet address look
up. To maintain netdev->dev_addr in this tree we need to make all
the writes to it go through appropriate helpers.

Make sure local references to netdev->dev_addr are constant.

Signed-off-by: Jakub Kicinski <kuba@kernel.org>
Signed-off-by: David S. Miller <davem@davemloft.net>

authored by

Jakub Kicinski and committed by
David S. Miller
6f238100 86466cbe

+14 -16
+13 -15
drivers/net/bonding/bond_alb.c
··· 50 50 #pragma pack() 51 51 52 52 /* Forward declaration */ 53 - static void alb_send_learning_packets(struct slave *slave, u8 mac_addr[], 53 + static void alb_send_learning_packets(struct slave *slave, const u8 mac_addr[], 54 54 bool strict_match); 55 55 static void rlb_purge_src_ip(struct bonding *bond, struct arp_pkt *arp); 56 56 static void rlb_src_unlink(struct bonding *bond, u32 index); ··· 353 353 * 354 354 * Caller must hold RTNL 355 355 */ 356 - static void rlb_teach_disabled_mac_on_primary(struct bonding *bond, u8 addr[]) 356 + static void rlb_teach_disabled_mac_on_primary(struct bonding *bond, 357 + const u8 addr[]) 357 358 { 358 359 struct slave *curr_active = rtnl_dereference(bond->curr_active_slave); 359 360 ··· 905 904 906 905 /*********************** tlb/rlb shared functions *********************/ 907 906 908 - static void alb_send_lp_vid(struct slave *slave, u8 mac_addr[], 907 + static void alb_send_lp_vid(struct slave *slave, const u8 mac_addr[], 909 908 __be16 vlan_proto, u16 vid) 910 909 { 911 910 struct learning_pkt pkt; ··· 941 940 struct alb_walk_data { 942 941 struct bonding *bond; 943 942 struct slave *slave; 944 - u8 *mac_addr; 943 + const u8 *mac_addr; 945 944 bool strict_match; 946 945 }; 947 946 ··· 950 949 { 951 950 struct alb_walk_data *data = (struct alb_walk_data *)priv->data; 952 951 bool strict_match = data->strict_match; 952 + const u8 *mac_addr = data->mac_addr; 953 953 struct bonding *bond = data->bond; 954 954 struct slave *slave = data->slave; 955 - u8 *mac_addr = data->mac_addr; 956 955 struct bond_vlan_tag *tags; 957 956 958 957 if (is_vlan_dev(upper) && ··· 983 982 return 0; 984 983 } 985 984 986 - static void alb_send_learning_packets(struct slave *slave, u8 mac_addr[], 985 + static void alb_send_learning_packets(struct slave *slave, const u8 mac_addr[], 987 986 bool strict_match) 988 987 { 989 988 struct bonding *bond = bond_get_bond_by_slave(slave); ··· 1007 1006 rcu_read_unlock(); 1008 1007 } 1009 1008 1010 - static int alb_set_slave_mac_addr(struct slave *slave, u8 addr[], 1009 + static int alb_set_slave_mac_addr(struct slave *slave, const u8 addr[], 1011 1010 unsigned int len) 1012 1011 { 1013 1012 struct net_device *dev = slave->dev; 1014 1013 struct sockaddr_storage ss; 1015 1014 1016 1015 if (BOND_MODE(slave->bond) == BOND_MODE_TLB) { 1017 - memcpy(dev->dev_addr, addr, len); 1016 + __dev_addr_set(dev, addr, len); 1018 1017 return 0; 1019 1018 } 1020 1019 ··· 1243 1242 res = dev_set_mac_address(slave->dev, addr, NULL); 1244 1243 1245 1244 /* restore net_device's hw address */ 1246 - bond_hw_addr_copy(slave->dev->dev_addr, tmp_addr, 1247 - slave->dev->addr_len); 1245 + dev_addr_set(slave->dev, tmp_addr); 1248 1246 1249 1247 if (res) 1250 1248 goto unwind; ··· 1263 1263 rollback_slave->dev->addr_len); 1264 1264 dev_set_mac_address(rollback_slave->dev, 1265 1265 (struct sockaddr *)&ss, NULL); 1266 - bond_hw_addr_copy(rollback_slave->dev->dev_addr, tmp_addr, 1267 - rollback_slave->dev->addr_len); 1266 + dev_addr_set(rollback_slave->dev, tmp_addr); 1268 1267 } 1269 1268 1270 1269 return res; ··· 1726 1727 dev_set_mac_address(new_slave->dev, (struct sockaddr *)&ss, 1727 1728 NULL); 1728 1729 1729 - bond_hw_addr_copy(new_slave->dev->dev_addr, tmp_addr, 1730 - new_slave->dev->addr_len); 1730 + dev_addr_set(new_slave->dev, tmp_addr); 1731 1731 } 1732 1732 1733 1733 /* curr_active_slave must be set before calling alb_swap_mac_addr */ ··· 1759 1761 if (res) 1760 1762 return res; 1761 1763 1762 - bond_hw_addr_copy(bond_dev->dev_addr, ss->__data, bond_dev->addr_len); 1764 + dev_addr_set(bond_dev, ss->__data); 1763 1765 1764 1766 /* If there is no curr_active_slave there is nothing else to do. 1765 1767 * Otherwise we'll need to pass the new address to it and handle
+1 -1
drivers/net/bonding/bond_main.c
··· 923 923 if (err) 924 924 return err; 925 925 926 - memcpy(bond_dev->dev_addr, slave_dev->dev_addr, slave_dev->addr_len); 926 + __dev_addr_set(bond_dev, slave_dev->dev_addr, slave_dev->addr_len); 927 927 bond_dev->addr_assign_type = NET_ADDR_STOLEN; 928 928 call_netdevice_notifiers(NETDEV_CHANGEADDR, bond_dev); 929 929 return 0;