From 5d6b96762e503848c9b19db8ab000ce6354dfcb1 Mon Sep 17 00:00:00 2001 From: Jiri Pirko Date: Wed, 19 May 2010 03:26:39 +0000 Subject: [PATCH] --- yaml --- r: 202635 b: refs/heads/master c: 097811bb48c7837db94d7fe5d94f0f4b5e19e78c h: refs/heads/master i: 202633: f312bd44f83e41faf245655bbe103a43f9e82908 202631: bba75b4de0f621a66f0e66e5e4c8449d45408b58 v: v3 --- [refs] | 2 +- trunk/drivers/net/bonding/bond_alb.c | 33 +++++++++++----------------- 2 files changed, 14 insertions(+), 21 deletions(-) diff --git a/[refs] b/[refs] index 4bc5bc8021f5..8c9a7eeeece6 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 5206e24c2c348d739c31ebed10a741a02bbde9e0 +refs/heads/master: 097811bb48c7837db94d7fe5d94f0f4b5e19e78c diff --git a/trunk/drivers/net/bonding/bond_alb.c b/trunk/drivers/net/bonding/bond_alb.c index 40fdc41446cc..25c14c6236f5 100644 --- a/trunk/drivers/net/bonding/bond_alb.c +++ b/trunk/drivers/net/bonding/bond_alb.c @@ -233,34 +233,27 @@ static void tlb_deinitialize(struct bonding *bond) _unlock_tx_hashtbl(bond); } +static long long compute_gap(struct slave *slave) +{ + return (s64) (slave->speed << 20) - /* Convert to Megabit per sec */ + (s64) (SLAVE_TLB_INFO(slave).load << 3); /* Bytes to bits */ +} + /* Caller must hold bond lock for read */ static struct slave *tlb_get_least_loaded_slave(struct bonding *bond) { struct slave *slave, *least_loaded; - s64 max_gap; - int i, found = 0; - - /* Find the first enabled slave */ - bond_for_each_slave(bond, slave, i) { - if (SLAVE_IS_OK(slave)) { - found = 1; - break; - } - } - - if (!found) { - return NULL; - } + long long max_gap; + int i; - least_loaded = slave; - max_gap = (s64)(slave->speed << 20) - /* Convert to Megabit per sec */ - (s64)(SLAVE_TLB_INFO(slave).load << 3); /* Bytes to bits */ + least_loaded = NULL; + max_gap = LLONG_MIN; /* Find the slave with the largest gap */ - bond_for_each_slave_from(bond, slave, i, least_loaded) { + bond_for_each_slave(bond, slave, i) { if (SLAVE_IS_OK(slave)) { - s64 gap = (s64)(slave->speed << 20) - - (s64)(SLAVE_TLB_INFO(slave).load << 3); + long long gap = compute_gap(slave); + if (max_gap < gap) { least_loaded = slave; max_gap = gap;