diff options
author | Xin Long <lucien.xin@gmail.com> | 2018-04-24 02:33:37 -0400 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2018-04-24 09:36:21 -0400 |
commit | 9cf2f437ca5b39828984064fad213e68fc17ef11 (patch) | |
tree | 8154f3f53831411e20ca9eb2c51ab11a6a48728f | |
parent | 6cd968f4481437e6a8194b5e028000310ffe5ce2 (diff) |
team: fix netconsole setup over team
The same fix in Commit dbe173079ab5 ("bridge: fix netconsole
setup over bridge") is also needed for team driver.
While at it, remove the unnecessary parameter *team from
team_port_enable_netpoll().
v1->v2:
- fix it in a better way, as does bridge.
Fixes: 0fb52a27a04a ("team: cleanup netpoll clode")
Reported-by: João Avelino Bellomo Filho <jbellomo@redhat.com>
Signed-off-by: Xin Long <lucien.xin@gmail.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
-rw-r--r-- | drivers/net/team/team.c | 19 |
1 files changed, 12 insertions, 7 deletions
diff --git a/drivers/net/team/team.c b/drivers/net/team/team.c index acbe84967834..ddb6bf85a59c 100644 --- a/drivers/net/team/team.c +++ b/drivers/net/team/team.c | |||
@@ -1072,14 +1072,11 @@ static void team_port_leave(struct team *team, struct team_port *port) | |||
1072 | } | 1072 | } |
1073 | 1073 | ||
1074 | #ifdef CONFIG_NET_POLL_CONTROLLER | 1074 | #ifdef CONFIG_NET_POLL_CONTROLLER |
1075 | static int team_port_enable_netpoll(struct team *team, struct team_port *port) | 1075 | static int __team_port_enable_netpoll(struct team_port *port) |
1076 | { | 1076 | { |
1077 | struct netpoll *np; | 1077 | struct netpoll *np; |
1078 | int err; | 1078 | int err; |
1079 | 1079 | ||
1080 | if (!team->dev->npinfo) | ||
1081 | return 0; | ||
1082 | |||
1083 | np = kzalloc(sizeof(*np), GFP_KERNEL); | 1080 | np = kzalloc(sizeof(*np), GFP_KERNEL); |
1084 | if (!np) | 1081 | if (!np) |
1085 | return -ENOMEM; | 1082 | return -ENOMEM; |
@@ -1093,6 +1090,14 @@ static int team_port_enable_netpoll(struct team *team, struct team_port *port) | |||
1093 | return err; | 1090 | return err; |
1094 | } | 1091 | } |
1095 | 1092 | ||
1093 | static int team_port_enable_netpoll(struct team_port *port) | ||
1094 | { | ||
1095 | if (!port->team->dev->npinfo) | ||
1096 | return 0; | ||
1097 | |||
1098 | return __team_port_enable_netpoll(port); | ||
1099 | } | ||
1100 | |||
1096 | static void team_port_disable_netpoll(struct team_port *port) | 1101 | static void team_port_disable_netpoll(struct team_port *port) |
1097 | { | 1102 | { |
1098 | struct netpoll *np = port->np; | 1103 | struct netpoll *np = port->np; |
@@ -1107,7 +1112,7 @@ static void team_port_disable_netpoll(struct team_port *port) | |||
1107 | kfree(np); | 1112 | kfree(np); |
1108 | } | 1113 | } |
1109 | #else | 1114 | #else |
1110 | static int team_port_enable_netpoll(struct team *team, struct team_port *port) | 1115 | static int team_port_enable_netpoll(struct team_port *port) |
1111 | { | 1116 | { |
1112 | return 0; | 1117 | return 0; |
1113 | } | 1118 | } |
@@ -1221,7 +1226,7 @@ static int team_port_add(struct team *team, struct net_device *port_dev, | |||
1221 | goto err_vids_add; | 1226 | goto err_vids_add; |
1222 | } | 1227 | } |
1223 | 1228 | ||
1224 | err = team_port_enable_netpoll(team, port); | 1229 | err = team_port_enable_netpoll(port); |
1225 | if (err) { | 1230 | if (err) { |
1226 | netdev_err(dev, "Failed to enable netpoll on device %s\n", | 1231 | netdev_err(dev, "Failed to enable netpoll on device %s\n", |
1227 | portname); | 1232 | portname); |
@@ -1918,7 +1923,7 @@ static int team_netpoll_setup(struct net_device *dev, | |||
1918 | 1923 | ||
1919 | mutex_lock(&team->lock); | 1924 | mutex_lock(&team->lock); |
1920 | list_for_each_entry(port, &team->port_list, list) { | 1925 | list_for_each_entry(port, &team->port_list, list) { |
1921 | err = team_port_enable_netpoll(team, port); | 1926 | err = __team_port_enable_netpoll(port); |
1922 | if (err) { | 1927 | if (err) { |
1923 | __team_netpoll_cleanup(team); | 1928 | __team_netpoll_cleanup(team); |
1924 | break; | 1929 | break; |