netdev.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Jay Vosburgh <jay.vosburgh@canonical.com>
To: Nikolay Aleksandrov <razor@blackwall.org>
Cc: netdev@vger.kernel.org, davem@davemloft.net,
	Nikolay Aleksandrov <nikolay@cumulusnetworks.com>,
	Veaceslav Falico <vfalico@gmail.com>,
	Andy Gospodarek <gospo@cumulusnetworks.com>
Subject: Re: [PATCH net-next] bonding: 3ad: apply ad_actor settings changes immediately
Date: Wed, 03 Feb 2016 11:05:31 -0800	[thread overview]
Message-ID: <7907.1454526331@famine> (raw)
In-Reply-To: <1454501821-22175-1-git-send-email-razor@blackwall.org>

Nikolay Aleksandrov <razor@blackwall.org> wrote:

>From: Nikolay Aleksandrov <nikolay@cumulusnetworks.com>
>
>Currently the bonding allows to set ad_actor_system and prio while the
>bond device is down, but these are actually applied only if there aren't
>any slaves yet (applied to bond device when first slave shows up, and to
>slaves at 3ad bind time). After this patch changes are applied immediately
>and the new values can be used/seen after the bond's upped so it's not
>necessary anymore to release all and enslave again to see the changes.
>
>CC: Jay Vosburgh <j.vosburgh@gmail.com>
>CC: Veaceslav Falico <vfalico@gmail.com>
>CC: Andy Gospodarek <gospo@cumulusnetworks.com>
>Signed-off-by: Nikolay Aleksandrov <nikolay@cumulusnetworks.com>

	Looks good to me.

Signed-off-by: Jay Vosburgh <jay.vosburgh@canonical.com>

	-J

>---
> drivers/net/bonding/bond_3ad.c     | 40 +++++++++++++++++++++++++++++++++++---
> drivers/net/bonding/bond_options.c |  4 ++++
> include/net/bond_3ad.h             |  1 +
> 3 files changed, 42 insertions(+), 3 deletions(-)
>
>diff --git a/drivers/net/bonding/bond_3ad.c b/drivers/net/bonding/bond_3ad.c
>index 4cbb8b27a891..ee94056dbb2e 100644
>--- a/drivers/net/bonding/bond_3ad.c
>+++ b/drivers/net/bonding/bond_3ad.c
>@@ -357,6 +357,14 @@ static u8 __get_duplex(struct port *port)
> 	return retval;
> }
> 
>+static void __ad_actor_update_port(struct port *port)
>+{
>+	const struct bonding *bond = bond_get_bond_by_slave(port->slave);
>+
>+	port->actor_system = BOND_AD_INFO(bond).system.sys_mac_addr;
>+	port->actor_system_priority = BOND_AD_INFO(bond).system.sys_priority;
>+}
>+
> /* Conversions */
> 
> /**
>@@ -1963,9 +1971,7 @@ void bond_3ad_bind_slave(struct slave *slave)
> 		port->actor_admin_port_key = bond->params.ad_user_port_key << 6;
> 		ad_update_actor_keys(port, false);
> 		/* actor system is the bond's system */
>-		port->actor_system = BOND_AD_INFO(bond).system.sys_mac_addr;
>-		port->actor_system_priority =
>-		    BOND_AD_INFO(bond).system.sys_priority;
>+		__ad_actor_update_port(port);
> 		/* tx timer(to verify that no more than MAX_TX_IN_SECOND
> 		 * lacpdu's are sent in one second)
> 		 */
>@@ -2148,6 +2154,34 @@ out:
> }
> 
> /**
>+ * bond_3ad_update_ad_actor_settings - reflect change of actor settings to ports
>+ * @bond: bonding struct to work on
>+ *
>+ * If an ad_actor setting gets changed we need to update the individual port
>+ * settings so the bond device will use the new values when it gets upped.
>+ */
>+void bond_3ad_update_ad_actor_settings(struct bonding *bond)
>+{
>+	struct list_head *iter;
>+	struct slave *slave;
>+
>+	ASSERT_RTNL();
>+
>+	BOND_AD_INFO(bond).system.sys_priority = bond->params.ad_actor_sys_prio;
>+	if (is_zero_ether_addr(bond->params.ad_actor_system))
>+		BOND_AD_INFO(bond).system.sys_mac_addr =
>+		    *((struct mac_addr *)bond->dev->dev_addr);
>+	else
>+		BOND_AD_INFO(bond).system.sys_mac_addr =
>+		    *((struct mac_addr *)bond->params.ad_actor_system);
>+
>+	spin_lock_bh(&bond->mode_lock);
>+	bond_for_each_slave(bond, slave, iter)
>+		__ad_actor_update_port(&(SLAVE_AD_INFO(slave)->port));
>+	spin_unlock_bh(&bond->mode_lock);
>+}
>+
>+/**
>  * bond_3ad_state_machine_handler - handle state machines timeout
>  * @bond: bonding struct to work on
>  *
>diff --git a/drivers/net/bonding/bond_options.c b/drivers/net/bonding/bond_options.c
>index 55e93b6b6d21..ed0bdae64f5e 100644
>--- a/drivers/net/bonding/bond_options.c
>+++ b/drivers/net/bonding/bond_options.c
>@@ -1392,6 +1392,8 @@ static int bond_option_ad_actor_sys_prio_set(struct bonding *bond,
> 		    newval->value);
> 
> 	bond->params.ad_actor_sys_prio = newval->value;
>+	bond_3ad_update_ad_actor_settings(bond);
>+
> 	return 0;
> }
> 
>@@ -1418,6 +1420,8 @@ static int bond_option_ad_actor_system_set(struct bonding *bond,
> 
> 	netdev_info(bond->dev, "Setting ad_actor_system to %pM\n", mac);
> 	ether_addr_copy(bond->params.ad_actor_system, mac);
>+	bond_3ad_update_ad_actor_settings(bond);
>+
> 	return 0;
> 
> err:
>diff --git a/include/net/bond_3ad.h b/include/net/bond_3ad.h
>index f1fbc3b11962..f358ad5e4214 100644
>--- a/include/net/bond_3ad.h
>+++ b/include/net/bond_3ad.h
>@@ -306,5 +306,6 @@ int bond_3ad_lacpdu_recv(const struct sk_buff *skb, struct bonding *bond,
> 			 struct slave *slave);
> int bond_3ad_set_carrier(struct bonding *bond);
> void bond_3ad_update_lacp_rate(struct bonding *bond);
>+void bond_3ad_update_ad_actor_settings(struct bonding *bond);
> #endif /* _NET_BOND_3AD_H */
> 
>-- 
>2.4.3
>

  reply	other threads:[~2016-02-03 19:05 UTC|newest]

Thread overview: 6+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2016-02-03 12:17 [PATCH net-next] bonding: 3ad: apply ad_actor settings changes immediately Nikolay Aleksandrov
2016-02-03 19:05 ` Jay Vosburgh [this message]
2016-02-03 19:16   ` Nikolay Aleksandrov
2016-02-03 19:48     ` Jay Vosburgh
2016-02-03 19:55       ` Nikolay Aleksandrov
2016-02-09  9:46 ` David Miller

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=7907.1454526331@famine \
    --to=jay.vosburgh@canonical.com \
    --cc=davem@davemloft.net \
    --cc=gospo@cumulusnetworks.com \
    --cc=netdev@vger.kernel.org \
    --cc=nikolay@cumulusnetworks.com \
    --cc=razor@blackwall.org \
    --cc=vfalico@gmail.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).