All of lore.kernel.org
 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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.