Skip to content

Commit

Permalink
[BRIDGE]: Fix OOPS when bridging device without ethtool.
Browse files Browse the repository at this point in the history
Bridge code calls ethtool to get speed. The conversion to using
only ethtool_ops broke the case of devices without ethtool_ops.
This is a new regression in 2.6.23.

Rearranged the switch to a logical order, and use gcc initializer.

Ps: speed should have been part of the network device structure from
    the start rather than burying it in ethtool.

Signed-off-by: Stephen Hemminger <shemminger@linux-foundation.org>
Acked-by: Matthew Wilcox <matthew@wil.cx>
Signed-off-by: David S. Miller <davem@davemloft.net>
  • Loading branch information
Stephen Hemminger authored and David S. Miller committed Aug 31, 2007
1 parent df1c0b8 commit b4a488d
Showing 1 changed file with 8 additions and 8 deletions.
16 changes: 8 additions & 8 deletions net/bridge/br_if.c
Original file line number Diff line number Diff line change
Expand Up @@ -33,17 +33,17 @@
*/
static int port_cost(struct net_device *dev)
{
if (dev->ethtool_ops->get_settings) {
struct ethtool_cmd ecmd = { ETHTOOL_GSET };
int err = dev->ethtool_ops->get_settings(dev, &ecmd);
if (!err) {
if (dev->ethtool_ops && dev->ethtool_ops->get_settings) {
struct ethtool_cmd ecmd = { .cmd = ETHTOOL_GSET, };

if (!dev->ethtool_ops->get_settings(dev, &ecmd)) {
switch(ecmd.speed) {
case SPEED_100:
return 19;
case SPEED_1000:
return 4;
case SPEED_10000:
return 2;
case SPEED_1000:
return 4;
case SPEED_100:
return 19;
case SPEED_10:
return 100;
}
Expand Down

0 comments on commit b4a488d

Please sign in to comment.