Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 29112f4e authored by Jiri Pirko's avatar Jiri Pirko Committed by David S. Miller
Browse files

bonding: use ethtool for link checking first



This patch only changes the order of interfaces to use for checking slave link
status in bond_check_dev_link() to priorize ethtool interface. Should safe some
troubles as ethtool seems to be more supported.

Jirka

Signed-off-by: default avatarJiri Pirko <jpirko@redhat.com>

 drivers/net/bonding/bond_main.c |   26 ++++++++++++--------------
 1 files changed, 12 insertions(+), 14 deletions(-)
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent 434e7b0d
Loading
Loading
Loading
Loading
+12 −14
Original line number Original line Diff line number Diff line
@@ -695,6 +695,18 @@ static int bond_check_dev_link(struct bonding *bond, struct net_device *slave_de
	if (bond->params.use_carrier)
	if (bond->params.use_carrier)
		return netif_carrier_ok(slave_dev) ? BMSR_LSTATUS : 0;
		return netif_carrier_ok(slave_dev) ? BMSR_LSTATUS : 0;


	/* Try to get link status using Ethtool first. */
	if (slave_dev->ethtool_ops) {
		if (slave_dev->ethtool_ops->get_link) {
			u32 link;

			link = slave_dev->ethtool_ops->get_link(slave_dev);

			return link ? BMSR_LSTATUS : 0;
		}
	}

	/* Ethtool can't be used, fallback to MII ioclts. */
	ioctl = slave_ops->ndo_do_ioctl;
	ioctl = slave_ops->ndo_do_ioctl;
	if (ioctl) {
	if (ioctl) {
		/* TODO: set pointer to correct ioctl on a per team member */
		/* TODO: set pointer to correct ioctl on a per team member */
@@ -720,20 +732,6 @@ static int bond_check_dev_link(struct bonding *bond, struct net_device *slave_de
		}
		}
	}
	}


	/*
	 * Some drivers cache ETHTOOL_GLINK for a period of time so we only
	 * attempt to get link status from it if the above MII ioctls fail.
	 */
	if (slave_dev->ethtool_ops) {
		if (slave_dev->ethtool_ops->get_link) {
			u32 link;

			link = slave_dev->ethtool_ops->get_link(slave_dev);

			return link ? BMSR_LSTATUS : 0;
		}
	}

	/*
	/*
	 * If reporting, report that either there's no dev->do_ioctl,
	 * If reporting, report that either there's no dev->do_ioctl,
	 * or both SIOCGMIIREG and get_link failed (meaning that we
	 * or both SIOCGMIIREG and get_link failed (meaning that we