Patchwork [net-next-2.6] bonding: allow all slave speeds

login
register
mail settings
Submitter Jiri Pirko
Date June 1, 2011, 8:36 p.m.
Message ID <1306960593-16347-1-git-send-email-jpirko@redhat.com>
Download mbox | patch
Permalink /patch/98262/
State Accepted
Delegated to: David Miller
Headers show

Comments

Jiri Pirko - June 1, 2011, 8:36 p.m.
No need to check for 10, 100, 1000, 10000 explicitly. Just make this
generic and check for invalid values only (similar check is in ethtool
userspace app). This enables correct speed handling for slave devices
with "nonstandard" speeds.

Signed-off-by: Jiri Pirko <jpirko@redhat.com>
---
 drivers/net/bonding/bond_main.c |    9 +--------
 1 files changed, 1 insertions(+), 8 deletions(-)
Nicolas de Pesloüan - June 1, 2011, 9:30 p.m.
Le 01/06/2011 22:36, Jiri Pirko a écrit :
> No need to check for 10, 100, 1000, 10000 explicitly. Just make this
> generic and check for invalid values only (similar check is in ethtool
> userspace app). This enables correct speed handling for slave devices
> with "nonstandard" speeds.
>
> Signed-off-by: Jiri Pirko<jpirko@redhat.com>
> ---
>   drivers/net/bonding/bond_main.c |    9 +--------
>   1 files changed, 1 insertions(+), 8 deletions(-)
>
> diff --git a/drivers/net/bonding/bond_main.c b/drivers/net/bonding/bond_main.c
> index 17b4dd9..716c852 100644
> --- a/drivers/net/bonding/bond_main.c
> +++ b/drivers/net/bonding/bond_main.c
> @@ -629,15 +629,8 @@ static int bond_update_speed_duplex(struct slave *slave)
>   		return -1;
>
>   	slave_speed = ethtool_cmd_speed(&etool);
> -	switch (slave_speed) {
> -	case SPEED_10:
> -	case SPEED_100:
> -	case SPEED_1000:
> -	case SPEED_10000:
> -		break;
> -	default:
> +	if (slave_speed == 0 || slave_speed == ((__u32) -1))
>   		return -1;
> -	}
>
>   	switch (etool.duplex) {
>   	case DUPLEX_FULL:

This makes sense to me. In particular, with Wifi slaves, this should allow the actual speed of the 
wireless link to be taken into account for active slave selection. We may need to add more stuffs 
for this to work, because Wifi link speed may change after enslavement, but this is a first step in 
the right direction.

Also, the same is true for FULL/HALF duplex. Why should we check the returned value, instead of just 
storing it?

Reviewed-by: Nicolas de Pesloüan <nicolas.2p.debian@free.fr>
--
To unsubscribe from this list: send the line "unsubscribe netdev" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
David Miller - June 2, 2011, 9:44 p.m.
From: Jiri Pirko <jpirko@redhat.com>
Date: Wed,  1 Jun 2011 22:36:33 +0200

> No need to check for 10, 100, 1000, 10000 explicitly. Just make this
> generic and check for invalid values only (similar check is in ethtool
> userspace app). This enables correct speed handling for slave devices
> with "nonstandard" speeds.
> 
> Signed-off-by: Jiri Pirko <jpirko@redhat.com>

Applied, thanks.
--
To unsubscribe from this list: send the line "unsubscribe netdev" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Patch

diff --git a/drivers/net/bonding/bond_main.c b/drivers/net/bonding/bond_main.c
index 17b4dd9..716c852 100644
--- a/drivers/net/bonding/bond_main.c
+++ b/drivers/net/bonding/bond_main.c
@@ -629,15 +629,8 @@  static int bond_update_speed_duplex(struct slave *slave)
 		return -1;
 
 	slave_speed = ethtool_cmd_speed(&etool);
-	switch (slave_speed) {
-	case SPEED_10:
-	case SPEED_100:
-	case SPEED_1000:
-	case SPEED_10000:
-		break;
-	default:
+	if (slave_speed == 0 || slave_speed == ((__u32) -1))
 		return -1;
-	}
 
 	switch (etool.duplex) {
 	case DUPLEX_FULL: