bonding: use bond_set_slave_arr to simplify code
In bond_reset_slave_arr(), values are assigned and memory is released only when the variables "usable" and "all" are not NULL. But even if the "usable" and "all" variables are NULL, they can still work, because value will be checked in kfree_rcu. Therefore, use bond_set_slave_arr() and set the input parameters "usable_slaves" and "all_slaves" to NULL to simplify the code in bond_reset_slave_arr(). And the same to bond_uninit(). Signed-off-by: Zhengchao Shao <shaozhengchao@huawei.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
cc317ea3d9
commit
a8f3f4b448
|
@ -5046,19 +5046,7 @@ static void bond_set_slave_arr(struct bonding *bond,
|
|||
|
||||
static void bond_reset_slave_arr(struct bonding *bond)
|
||||
{
|
||||
struct bond_up_slave *usable, *all;
|
||||
|
||||
usable = rtnl_dereference(bond->usable_slaves);
|
||||
if (usable) {
|
||||
RCU_INIT_POINTER(bond->usable_slaves, NULL);
|
||||
kfree_rcu(usable, rcu);
|
||||
}
|
||||
|
||||
all = rtnl_dereference(bond->all_slaves);
|
||||
if (all) {
|
||||
RCU_INIT_POINTER(bond->all_slaves, NULL);
|
||||
kfree_rcu(all, rcu);
|
||||
}
|
||||
bond_set_slave_arr(bond, NULL, NULL);
|
||||
}
|
||||
|
||||
/* Build the usable slaves array in control path for modes that use xmit-hash
|
||||
|
@ -5951,7 +5939,6 @@ void bond_setup(struct net_device *bond_dev)
|
|||
static void bond_uninit(struct net_device *bond_dev)
|
||||
{
|
||||
struct bonding *bond = netdev_priv(bond_dev);
|
||||
struct bond_up_slave *usable, *all;
|
||||
struct list_head *iter;
|
||||
struct slave *slave;
|
||||
|
||||
|
@ -5962,17 +5949,7 @@ static void bond_uninit(struct net_device *bond_dev)
|
|||
__bond_release_one(bond_dev, slave->dev, true, true);
|
||||
netdev_info(bond_dev, "Released all slaves\n");
|
||||
|
||||
usable = rtnl_dereference(bond->usable_slaves);
|
||||
if (usable) {
|
||||
RCU_INIT_POINTER(bond->usable_slaves, NULL);
|
||||
kfree_rcu(usable, rcu);
|
||||
}
|
||||
|
||||
all = rtnl_dereference(bond->all_slaves);
|
||||
if (all) {
|
||||
RCU_INIT_POINTER(bond->all_slaves, NULL);
|
||||
kfree_rcu(all, rcu);
|
||||
}
|
||||
bond_set_slave_arr(bond, NULL, NULL);
|
||||
|
||||
list_del(&bond->bond_list);
|
||||
|
||||
|
|
Loading…
Reference in New Issue