return 0;
}
+/*
+ * Count the number of slaves with link == BOND_LINK_*
+ */
+static int bond_count_slaves(struct bonding *bond, int link)
+{
+ struct slave *slave;
+ int i, count=0;
+
+ bond_for_each_slave(bond, slave, i) {
+ if (slave->link == link)
+ count++;
+ }
+ return count;
+}
+
/*
* Get link speed and duplex from the slave's base driver
* using ethtool. If for some reason the call fails or the
break;
} else { /* link going up */
slave->link = BOND_LINK_BACK;
- slave->delay = bond->params.updelay;
+ slave->delay = 0;
- if (bond->params.updelay) {
- /* if updelay == 0, no need to
- advertise about a 0 ms delay */
+ if (bond_count_slaves(bond, BOND_LINK_UP) == 0) {
+ printk(KERN_INFO DRV_NAME
+ ": %s: link status up for "
+ "interface %s, enabling it "
+ "immediately as it is the only slave.\n",
+ bond_dev->name,
+ slave_dev->name);
+ } else if (bond->params.updelay) {
+ slave->delay = bond->params.updelay;
printk(KERN_INFO DRV_NAME
": %s: link status up for "
"interface %s, enabling it "