Patchwork [net-next] team: update master carrier state

login
register
mail settings
Submitter Flavio Leitner
Date Dec. 30, 2012, 6:27 p.m.
Message ID <1356892049-14667-1-git-send-email-fbl@redhat.com>
Download mbox | patch
Permalink /patch/208755/
State Accepted
Delegated to: David Miller
Headers show

Comments

Flavio Leitner - Dec. 30, 2012, 6:27 p.m.
Update master's carrier state when there is any
change with its ports.

Signed-off-by: Flavio Leitner <fbl@redhat.com>
---
 drivers/net/team/team.c | 24 ++++++++++++++++++++++--
 1 file changed, 22 insertions(+), 2 deletions(-)
Jiri Pirko - Dec. 30, 2012, 9:47 p.m.
Sun, Dec 30, 2012 at 07:27:29PM CET, fbl@redhat.com wrote:
>Update master's carrier state when there is any
>change with its ports.


This patch looks good to me. Just one nitpick I spotted....

>+	bool team_linkup;
>+
>+	team_linkup = false;


This can be squashed together.

--
To unsubscribe from this list: send the line "unsubscribe netdev" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Flavio Leitner - Dec. 30, 2012, 10:06 p.m.
On Sun, Dec 30, 2012 at 10:47:23PM +0100, Jiri Pirko wrote:
> Sun, Dec 30, 2012 at 07:27:29PM CET, fbl@redhat.com wrote:
> >Update master's carrier state when there is any
> >change with its ports.
> 
> 
> This patch looks good to me. Just one nitpick I spotted....
> 
> >+	bool team_linkup;
> >+
> >+	team_linkup = false;
> 
> 
> This can be squashed together.

Ok, but that increases the static size of the module because it
moves the variable out of bss.

I have no strong opinion on either case, so it's up to you.

Thanks,
Jiri Pirko - Dec. 30, 2012, 10:10 p.m.
Sun, Dec 30, 2012 at 11:06:16PM CET, fbl@redhat.com wrote:
>On Sun, Dec 30, 2012 at 10:47:23PM +0100, Jiri Pirko wrote:
>> Sun, Dec 30, 2012 at 07:27:29PM CET, fbl@redhat.com wrote:
>> >Update master's carrier state when there is any
>> >change with its ports.
>> 
>> 
>> This patch looks good to me. Just one nitpick I spotted....
>> 
>> >+	bool team_linkup;
>> >+
>> >+	team_linkup = false;
>> 
>> 
>> This can be squashed together.
>
>Ok, but that increases the static size of the module because it
>moves the variable out of bss.
>
>I have no strong opinion on either case, so it's up to you.

Ok :)

Acked-by: Jiri Pirko <jiri@resnulli.us>


--
To unsubscribe from this list: send the line "unsubscribe netdev" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
David Miller - Jan. 3, 2013, 10:15 a.m.
From: Jiri Pirko <jiri@resnulli.us>
Date: Sun, 30 Dec 2012 23:10:52 +0100

> Sun, Dec 30, 2012 at 11:06:16PM CET, fbl@redhat.com wrote:
>>On Sun, Dec 30, 2012 at 10:47:23PM +0100, Jiri Pirko wrote:
>>> Sun, Dec 30, 2012 at 07:27:29PM CET, fbl@redhat.com wrote:
>>> >Update master's carrier state when there is any
>>> >change with its ports.
>>> 
>>> 
>>> This patch looks good to me. Just one nitpick I spotted....
>>> 
>>> >+	bool team_linkup;
>>> >+
>>> >+	team_linkup = false;
>>> 
>>> 
>>> This can be squashed together.
>>
>>Ok, but that increases the static size of the module because it
>>moves the variable out of bss.
>>
>>I have no strong opinion on either case, so it's up to you.
> 
> Ok :)
> 
> Acked-by: Jiri Pirko <jiri@resnulli.us>

Applied.
--
To unsubscribe from this list: send the line "unsubscribe netdev" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Patch

diff --git a/drivers/net/team/team.c b/drivers/net/team/team.c
index 918a901..78c7d87 100644
--- a/drivers/net/team/team.c
+++ b/drivers/net/team/team.c
@@ -1400,13 +1400,11 @@  static void team_destructor(struct net_device *dev)
 
 static int team_open(struct net_device *dev)
 {
-	netif_carrier_on(dev);
 	return 0;
 }
 
 static int team_close(struct net_device *dev)
 {
-	netif_carrier_off(dev);
 	return 0;
 }
 
@@ -2560,21 +2558,43 @@  send_event:
 
 }
 
+static void __team_carrier_check(struct team *team)
+{
+	struct team_port *port;
+	bool team_linkup;
+
+	team_linkup = false;
+	list_for_each_entry(port, &team->port_list, list) {
+		if (port->linkup) {
+			team_linkup = true;
+			break;
+		}
+	}
+
+	if (team_linkup)
+		netif_carrier_on(team->dev);
+	else
+		netif_carrier_off(team->dev);
+}
+
 static void __team_port_change_check(struct team_port *port, bool linkup)
 {
 	if (port->state.linkup != linkup)
 		__team_port_change_send(port, linkup);
+	__team_carrier_check(port->team);
 }
 
 static void __team_port_change_port_added(struct team_port *port, bool linkup)
 {
 	__team_port_change_send(port, linkup);
+	__team_carrier_check(port->team);
 }
 
 static void __team_port_change_port_removed(struct team_port *port)
 {
 	port->removed = true;
 	__team_port_change_send(port, false);
+	__team_carrier_check(port->team);
 }
 
 static void team_port_change_check(struct team_port *port, bool linkup)