if (link_state)
                                continue;
 
-                       bond_set_slave_link_state(slave, BOND_LINK_FAIL,
-                                                 BOND_SLAVE_NOTIFY_LATER);
+                       bond_propose_link_state(slave, BOND_LINK_FAIL);
                        slave->delay = bond->params.downdelay;
                        if (slave->delay) {
                                netdev_info(bond->dev, "link status down for %sinterface %s, disabling it in %d ms\n",
                case BOND_LINK_FAIL:
                        if (link_state) {
                                /* recovered before downdelay expired */
-                               bond_set_slave_link_state(slave, BOND_LINK_UP,
-                                                         BOND_SLAVE_NOTIFY_LATER);
+                               bond_propose_link_state(slave, BOND_LINK_UP);
                                slave->last_link_up = jiffies;
                                netdev_info(bond->dev, "link status up again after %d ms for interface %s\n",
                                            (bond->params.downdelay - slave->delay) *
                        if (!link_state)
                                continue;
 
-                       bond_set_slave_link_state(slave, BOND_LINK_BACK,
-                                                 BOND_SLAVE_NOTIFY_LATER);
+                       bond_propose_link_state(slave, BOND_LINK_BACK);
                        slave->delay = bond->params.updelay;
 
                        if (slave->delay) {
                        /*FALLTHRU*/
                case BOND_LINK_BACK:
                        if (!link_state) {
-                               bond_set_slave_link_state(slave,
-                                                         BOND_LINK_DOWN,
-                                                         BOND_SLAVE_NOTIFY_LATER);
+                               bond_propose_link_state(slave, BOND_LINK_DOWN);
                                netdev_info(bond->dev, "link status down again after %d ms for interface %s\n",
                                            (bond->params.updelay - slave->delay) *
                                            bond->params.miimon,
                                            mii_work.work);
        bool should_notify_peers = false;
        unsigned long delay;
+       struct slave *slave;
+       struct list_head *iter;
 
        delay = msecs_to_jiffies(bond->params.miimon);
 
                        goto re_arm;
                }
 
+               bond_for_each_slave(bond, slave, iter) {
+                       bond_commit_link_state(slave, BOND_SLAVE_NOTIFY_LATER);
+               }
                bond_miimon_commit(bond);
 
                rtnl_unlock();  /* might sleep, hold no other locks */