Commit b98d9c66 authored by Nikolay Aleksandrov's avatar Nikolay Aleksandrov Committed by David S. Miller
Browse files

bonding: convert miimon to use the new option API



This patch adds the necessary changes so miimon would use
the new bonding option API. The "default" definition has been removed as
it was 0.

Signed-off-by: default avatarNikolay Aleksandrov <nikolay@redhat.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent ef56becb
Loading
Loading
Loading
Loading
+4 −5
Original line number Diff line number Diff line
@@ -86,12 +86,11 @@
/*---------------------------- Module parameters ----------------------------*/

/* monitor all links that often (in milliseconds). <=0 disables monitoring */
#define BOND_LINK_MON_INTERV	0

static int max_bonds	= BOND_DEFAULT_MAX_BONDS;
static int tx_queues	= BOND_DEFAULT_TX_QUEUES;
static int num_peer_notif = 1;
static int miimon	= BOND_LINK_MON_INTERV;
static int miimon;
static int updelay;
static int downdelay;
static int use_carrier	= 1;
@@ -4046,9 +4045,9 @@ static int bond_check_params(struct bond_params *params)
	}

	if (miimon < 0) {
		pr_warning("Warning: miimon module parameter (%d), not in range 0-%d, so it was reset to %d\n",
			   miimon, INT_MAX, BOND_LINK_MON_INTERV);
		miimon = BOND_LINK_MON_INTERV;
		pr_warning("Warning: miimon module parameter (%d), not in range 0-%d, so it was reset to 0\n",
			   miimon, INT_MAX);
		miimon = 0;
	}

	if (updelay < 0) {
+2 −1
Original line number Diff line number Diff line
@@ -132,7 +132,8 @@ static int bond_changelink(struct net_device *bond_dev,
	if (data[IFLA_BOND_MIIMON]) {
		miimon = nla_get_u32(data[IFLA_BOND_MIIMON]);

		err = bond_option_miimon_set(bond, miimon);
		bond_opt_initval(&newval, miimon);
		err = __bond_opt_set(bond, BOND_OPT_MIIMON, &newval);
		if (err)
			return err;
	}
+14 −11
Original line number Diff line number Diff line
@@ -200,6 +200,13 @@ static struct bond_option bond_opts[] = {
		.values = bond_num_peer_notif_tbl,
		.set = bond_option_num_peer_notif_set
	},
	[BOND_OPT_MIIMON] = {
		.id = BOND_OPT_MIIMON,
		.name = "miimon",
		.desc = "Link check interval in milliseconds",
		.values = bond_intmax_tbl,
		.set = bond_option_miimon_set
	},
	{ }
};

@@ -575,16 +582,11 @@ int bond_option_active_slave_set(struct bonding *bond,
	return ret;
}

int bond_option_miimon_set(struct bonding *bond, int miimon)
int bond_option_miimon_set(struct bonding *bond, struct bond_opt_value *newval)
{
	if (miimon < 0) {
		pr_err("%s: Invalid miimon value %d not in range %d-%d; rejected.\n",
		       bond->dev->name, miimon, 0, INT_MAX);
		return -EINVAL;
	}
	pr_info("%s: Setting MII monitoring interval to %d.\n",
		bond->dev->name, miimon);
	bond->params.miimon = miimon;
	pr_info("%s: Setting MII monitoring interval to %llu.\n",
		bond->dev->name, newval->value);
	bond->params.miimon = newval->value;
	if (bond->params.updelay)
		pr_info("%s: Note: Updating updelay (to %d) since it is a multiple of the miimon value.\n",
			bond->dev->name,
@@ -593,7 +595,7 @@ int bond_option_miimon_set(struct bonding *bond, int miimon)
		pr_info("%s: Note: Updating downdelay (to %d) since it is a multiple of the miimon value.\n",
			bond->dev->name,
			bond->params.downdelay * bond->params.miimon);
	if (miimon && bond->params.arp_interval) {
	if (newval->value && bond->params.arp_interval) {
		pr_info("%s: MII monitoring cannot be used with ARP monitoring. Disabling ARP monitoring...\n",
			bond->dev->name);
		bond->params.arp_interval = 0;
@@ -606,13 +608,14 @@ int bond_option_miimon_set(struct bonding *bond, int miimon)
		 * timer will get fired off when the open function
		 * is called.
		 */
		if (!miimon) {
		if (!newval->value) {
			cancel_delayed_work_sync(&bond->mii_work);
		} else {
			cancel_delayed_work_sync(&bond->arp_work);
			queue_delayed_work(bond->wq, &bond->mii_work, 0);
		}
	}

	return 0;
}

+2 −0
Original line number Diff line number Diff line
@@ -52,6 +52,7 @@ enum {
	BOND_OPT_MINLINKS,
	BOND_OPT_AD_SELECT,
	BOND_OPT_NUM_PEER_NOTIF,
	BOND_OPT_MIIMON,
	BOND_OPT_LAST
};

@@ -139,4 +140,5 @@ int bond_option_ad_select_set(struct bonding *bond,
			      struct bond_opt_value *newval);
int bond_option_num_peer_notif_set(struct bonding *bond,
				   struct bond_opt_value *newval);
int bond_option_miimon_set(struct bonding *bond, struct bond_opt_value *newval);
#endif /* _BOND_OPTIONS_H */
+2 −12
Original line number Diff line number Diff line
@@ -673,23 +673,13 @@ static ssize_t bonding_store_miimon(struct device *d,
				    struct device_attribute *attr,
				    const char *buf, size_t count)
{
	int new_value, ret;
	struct bonding *bond = to_bond(d);
	int ret;

	if (sscanf(buf, "%d", &new_value) != 1) {
		pr_err("%s: no miimon value specified.\n",
		       bond->dev->name);
		return -EINVAL;
	}

	if (!rtnl_trylock())
		return restart_syscall();

	ret = bond_option_miimon_set(bond, new_value);
	ret = bond_opt_tryset_rtnl(bond, BOND_OPT_MIIMON, (char *)buf);
	if (!ret)
		ret = count;

	rtnl_unlock();
	return ret;
}
static DEVICE_ATTR(miimon, S_IRUGO | S_IWUSR,
Loading