read_lock(&bond->lock);
 
-       new_slave->last_arp_rx = jiffies;
+       new_slave->last_arp_rx = jiffies -
+               (msecs_to_jiffies(bond->params.arp_interval) + 1);
 
        if (bond->params.miimon && !bond->params.use_carrier) {
                link_reporting = bond_check_dev_link(bond, slave_dev, 1);
        }
 
        /* check for initial state */
-       if (!bond->params.miimon ||
-           (bond_check_dev_link(bond, slave_dev, 0) == BMSR_LSTATUS)) {
-               if (bond->params.updelay) {
-                       pr_debug("Initial state of slave_dev is BOND_LINK_BACK\n");
-                       new_slave->link  = BOND_LINK_BACK;
-                       new_slave->delay = bond->params.updelay;
+       if (bond->params.miimon) {
+               if (bond_check_dev_link(bond, slave_dev, 0) == BMSR_LSTATUS) {
+                       if (bond->params.updelay) {
+                               new_slave->link = BOND_LINK_BACK;
+                               new_slave->delay = bond->params.updelay;
+                       } else {
+                               new_slave->link = BOND_LINK_UP;
+                       }
                } else {
-                       pr_debug("Initial state of slave_dev is BOND_LINK_UP\n");
-                       new_slave->link  = BOND_LINK_UP;
+                       new_slave->link = BOND_LINK_DOWN;
                }
-               new_slave->jiffies = jiffies;
+       } else if (bond->params.arp_interval) {
+               new_slave->link = (netif_carrier_ok(slave_dev) ?
+                       BOND_LINK_UP : BOND_LINK_DOWN);
        } else {
-               pr_debug("Initial state of slave_dev is BOND_LINK_DOWN\n");
-               new_slave->link  = BOND_LINK_DOWN;
+               new_slave->link = BOND_LINK_UP;
        }
 
+       if (new_slave->link != BOND_LINK_DOWN)
+               new_slave->jiffies = jiffies;
+       pr_debug("Initial state of slave_dev is BOND_LINK_%s\n",
+               new_slave->link == BOND_LINK_DOWN ? "DOWN" :
+                       (new_slave->link == BOND_LINK_UP ? "UP" : "BACK"));
+
        bond_update_speed_duplex(new_slave);
 
        if (USES_PRIMARY(bond->params.mode) && bond->params.primary[0]) {