Commit ed7d4f02 authored by Maor Gottlieb's avatar Maor Gottlieb Committed by Saeed Mahameed

bonding: Rename slave_arr to usable_slaves

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: default avatarMaor Gottlieb <maorg@mellanox.com>
Reviewed-by: default avatarJiri Pirko <jiri@mellanox.com>
Reviewed-by: default avatarJay Vosburgh <jay.vosburgh@canonical.com>
Acked-by: default avatarDavid S. Miller <davem@davemloft.net>
Signed-off-by: default avatarSaeed Mahameed <saeedm@mellanox.com>
parent 119d48fd
...@@ -1360,7 +1360,7 @@ netdev_tx_t bond_tlb_xmit(struct sk_buff *skb, struct net_device *bond_dev) ...@@ -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) ...@@ -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) %
......
...@@ -4120,9 +4120,9 @@ static void bond_skip_slave(struct bond_up_slave *slaves, ...@@ -4120,9 +4120,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;
...@@ -4130,11 +4130,10 @@ int bond_update_slave_arr(struct bonding *bond, struct slave *skipslave) ...@@ -4130,11 +4130,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) {
...@@ -4142,14 +4141,14 @@ int bond_update_slave_arr(struct bonding *bond, struct slave *skipslave) ...@@ -4142,14 +4141,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;
} }
...@@ -4169,18 +4168,19 @@ int bond_update_slave_arr(struct bonding *bond, struct slave *skipslave) ...@@ -4169,18 +4168,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;
} }
...@@ -4197,7 +4197,7 @@ static netdev_tx_t bond_3ad_xor_xmit(struct sk_buff *skb, ...@@ -4197,7 +4197,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];
...@@ -4488,9 +4488,9 @@ static void bond_uninit(struct net_device *bond_dev) ...@@ -4488,9 +4488,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);
} }
......
...@@ -200,7 +200,7 @@ struct bonding { ...@@ -200,7 +200,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 *,
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment