bonding: use bond_set_slave_arr to simplify code
authorZhengchao Shao <shaozhengchao@huawei.com>
Thu, 10 Aug 2023 13:50:06 +0000 (21:50 +0800)
committerDavid S. Miller <davem@davemloft.net>
Fri, 11 Aug 2023 10:10:55 +0000 (11:10 +0100)
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>
drivers/net/bonding/bond_main.c

index 6636638..de3ae9c 100644 (file)
@@ -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);