static void bond_miimon_commit(struct bonding *bond)
 {
-       struct slave *slave, *primary;
+       struct slave *slave, *primary, *active;
        bool do_failover = false;
        struct list_head *iter;
 
+       ASSERT_RTNL();
+
        bond_for_each_slave(bond, slave, iter) {
                switch (slave->link_new_state) {
                case BOND_LINK_NOCHANGE:
 
                        bond_miimon_link_change(bond, slave, BOND_LINK_UP);
 
-                       if (!rcu_access_pointer(bond->curr_active_slave) || slave == primary ||
-                           slave->prio > rcu_dereference(bond->curr_active_slave)->prio)
+                       active = rtnl_dereference(bond->curr_active_slave);
+                       if (!active || slave == primary || slave->prio > active->prio)
                                do_failover = true;
 
                        continue;