bonding: Rename slave_arr to usable_slaves
[ Upstream commit ed7d4f023b1a9b0578f20d66557c66452ab845ec ] Rename slave_arr to usable_slaves, since we will have two arrays, one for the usable slaves and the other to all slaves. Signed-off-by: Maor Gottlieb <maorg@mellanox.com> Reviewed-by: Jiri Pirko <jiri@mellanox.com> Reviewed-by: Jay Vosburgh <jay.vosburgh@canonical.com> Acked-by: David S. Miller <davem@davemloft.net> Signed-off-by: Saeed Mahameed <saeedm@mellanox.com> Stable-dep-of: f8a65ab2f3ff ("bonding: fix link recovery in mode 2 when updelay is nonzero") Signed-off-by: Sasha Levin <sashal@kernel.org>
This commit is contained in:
parent
9eaeb3e460
commit
0879f594a7
@ -1360,7 +1360,7 @@ netdev_tx_t bond_tlb_xmit(struct sk_buff *skb, struct net_device *bond_dev)
|
|||||||
struct bond_up_slave *slaves;
|
struct bond_up_slave *slaves;
|
||||||
unsigned int count;
|
unsigned int count;
|
||||||
|
|
||||||
slaves = rcu_dereference(bond->slave_arr);
|
slaves = rcu_dereference(bond->usable_slaves);
|
||||||
count = slaves ? READ_ONCE(slaves->count) : 0;
|
count = slaves ? READ_ONCE(slaves->count) : 0;
|
||||||
if (likely(count))
|
if (likely(count))
|
||||||
tx_slave = slaves->arr[hash_index %
|
tx_slave = slaves->arr[hash_index %
|
||||||
@ -1494,7 +1494,7 @@ netdev_tx_t bond_alb_xmit(struct sk_buff *skb, struct net_device *bond_dev)
|
|||||||
struct bond_up_slave *slaves;
|
struct bond_up_slave *slaves;
|
||||||
unsigned int count;
|
unsigned int count;
|
||||||
|
|
||||||
slaves = rcu_dereference(bond->slave_arr);
|
slaves = rcu_dereference(bond->usable_slaves);
|
||||||
count = slaves ? READ_ONCE(slaves->count) : 0;
|
count = slaves ? READ_ONCE(slaves->count) : 0;
|
||||||
if (likely(count))
|
if (likely(count))
|
||||||
tx_slave = slaves->arr[bond_xmit_hash(bond, skb) %
|
tx_slave = slaves->arr[bond_xmit_hash(bond, skb) %
|
||||||
|
@ -4073,9 +4073,9 @@ static void bond_skip_slave(struct bond_up_slave *slaves,
|
|||||||
*/
|
*/
|
||||||
int bond_update_slave_arr(struct bonding *bond, struct slave *skipslave)
|
int bond_update_slave_arr(struct bonding *bond, struct slave *skipslave)
|
||||||
{
|
{
|
||||||
|
struct bond_up_slave *usable_slaves, *old_usable_slaves;
|
||||||
struct slave *slave;
|
struct slave *slave;
|
||||||
struct list_head *iter;
|
struct list_head *iter;
|
||||||
struct bond_up_slave *new_arr, *old_arr;
|
|
||||||
int agg_id = 0;
|
int agg_id = 0;
|
||||||
int ret = 0;
|
int ret = 0;
|
||||||
|
|
||||||
@ -4083,11 +4083,10 @@ int bond_update_slave_arr(struct bonding *bond, struct slave *skipslave)
|
|||||||
WARN_ON(lockdep_is_held(&bond->mode_lock));
|
WARN_ON(lockdep_is_held(&bond->mode_lock));
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
new_arr = kzalloc(offsetof(struct bond_up_slave, arr[bond->slave_cnt]),
|
usable_slaves = kzalloc(struct_size(usable_slaves, arr,
|
||||||
GFP_KERNEL);
|
bond->slave_cnt), GFP_KERNEL);
|
||||||
if (!new_arr) {
|
if (!usable_slaves) {
|
||||||
ret = -ENOMEM;
|
ret = -ENOMEM;
|
||||||
pr_err("Failed to build slave-array.\n");
|
|
||||||
goto out;
|
goto out;
|
||||||
}
|
}
|
||||||
if (BOND_MODE(bond) == BOND_MODE_8023AD) {
|
if (BOND_MODE(bond) == BOND_MODE_8023AD) {
|
||||||
@ -4095,14 +4094,14 @@ int bond_update_slave_arr(struct bonding *bond, struct slave *skipslave)
|
|||||||
|
|
||||||
if (bond_3ad_get_active_agg_info(bond, &ad_info)) {
|
if (bond_3ad_get_active_agg_info(bond, &ad_info)) {
|
||||||
pr_debug("bond_3ad_get_active_agg_info failed\n");
|
pr_debug("bond_3ad_get_active_agg_info failed\n");
|
||||||
kfree_rcu(new_arr, rcu);
|
kfree_rcu(usable_slaves, rcu);
|
||||||
/* No active aggragator means it's not safe to use
|
/* No active aggragator means it's not safe to use
|
||||||
* the previous array.
|
* the previous array.
|
||||||
*/
|
*/
|
||||||
old_arr = rtnl_dereference(bond->slave_arr);
|
old_usable_slaves = rtnl_dereference(bond->usable_slaves);
|
||||||
if (old_arr) {
|
if (old_usable_slaves) {
|
||||||
RCU_INIT_POINTER(bond->slave_arr, NULL);
|
RCU_INIT_POINTER(bond->usable_slaves, NULL);
|
||||||
kfree_rcu(old_arr, rcu);
|
kfree_rcu(old_usable_slaves, rcu);
|
||||||
}
|
}
|
||||||
goto out;
|
goto out;
|
||||||
}
|
}
|
||||||
@ -4122,18 +4121,19 @@ int bond_update_slave_arr(struct bonding *bond, struct slave *skipslave)
|
|||||||
continue;
|
continue;
|
||||||
|
|
||||||
slave_dbg(bond->dev, slave->dev, "Adding slave to tx hash array[%d]\n",
|
slave_dbg(bond->dev, slave->dev, "Adding slave to tx hash array[%d]\n",
|
||||||
new_arr->count);
|
usable_slaves->count);
|
||||||
|
|
||||||
new_arr->arr[new_arr->count++] = slave;
|
usable_slaves->arr[usable_slaves->count++] = slave;
|
||||||
}
|
}
|
||||||
|
|
||||||
old_arr = rtnl_dereference(bond->slave_arr);
|
old_usable_slaves = rtnl_dereference(bond->usable_slaves);
|
||||||
rcu_assign_pointer(bond->slave_arr, new_arr);
|
rcu_assign_pointer(bond->usable_slaves, usable_slaves);
|
||||||
if (old_arr)
|
if (old_usable_slaves)
|
||||||
kfree_rcu(old_arr, rcu);
|
kfree_rcu(old_usable_slaves, rcu);
|
||||||
out:
|
out:
|
||||||
if (ret != 0 && skipslave)
|
if (ret != 0 && skipslave)
|
||||||
bond_skip_slave(rtnl_dereference(bond->slave_arr), skipslave);
|
bond_skip_slave(rtnl_dereference(bond->usable_slaves),
|
||||||
|
skipslave);
|
||||||
|
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
@ -4150,7 +4150,7 @@ static netdev_tx_t bond_3ad_xor_xmit(struct sk_buff *skb,
|
|||||||
struct bond_up_slave *slaves;
|
struct bond_up_slave *slaves;
|
||||||
unsigned int count;
|
unsigned int count;
|
||||||
|
|
||||||
slaves = rcu_dereference(bond->slave_arr);
|
slaves = rcu_dereference(bond->usable_slaves);
|
||||||
count = slaves ? READ_ONCE(slaves->count) : 0;
|
count = slaves ? READ_ONCE(slaves->count) : 0;
|
||||||
if (likely(count)) {
|
if (likely(count)) {
|
||||||
slave = slaves->arr[bond_xmit_hash(bond, skb) % count];
|
slave = slaves->arr[bond_xmit_hash(bond, skb) % count];
|
||||||
@ -4457,9 +4457,9 @@ static void bond_uninit(struct net_device *bond_dev)
|
|||||||
__bond_release_one(bond_dev, slave->dev, true, true);
|
__bond_release_one(bond_dev, slave->dev, true, true);
|
||||||
netdev_info(bond_dev, "Released all slaves\n");
|
netdev_info(bond_dev, "Released all slaves\n");
|
||||||
|
|
||||||
arr = rtnl_dereference(bond->slave_arr);
|
arr = rtnl_dereference(bond->usable_slaves);
|
||||||
if (arr) {
|
if (arr) {
|
||||||
RCU_INIT_POINTER(bond->slave_arr, NULL);
|
RCU_INIT_POINTER(bond->usable_slaves, NULL);
|
||||||
kfree_rcu(arr, rcu);
|
kfree_rcu(arr, rcu);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -205,7 +205,7 @@ struct bonding {
|
|||||||
struct slave __rcu *curr_active_slave;
|
struct slave __rcu *curr_active_slave;
|
||||||
struct slave __rcu *current_arp_slave;
|
struct slave __rcu *current_arp_slave;
|
||||||
struct slave __rcu *primary_slave;
|
struct slave __rcu *primary_slave;
|
||||||
struct bond_up_slave __rcu *slave_arr; /* Array of usable slaves */
|
struct bond_up_slave __rcu *usable_slaves; /* Array of usable slaves */
|
||||||
bool force_primary;
|
bool force_primary;
|
||||||
s32 slave_cnt; /* never change this value outside the attach/detach wrappers */
|
s32 slave_cnt; /* never change this value outside the attach/detach wrappers */
|
||||||
int (*recv_probe)(const struct sk_buff *, struct bonding *,
|
int (*recv_probe)(const struct sk_buff *, struct bonding *,
|
||||||
|
Loading…
Reference in New Issue
Block a user