Commit 35b384bd authored by Jiri Pirko's avatar Jiri Pirko Committed by David S. Miller

team: ensure correct order of netlink messages delivery

currently, when port is created and per-port options are present, there
options are sent to userspace with ifindex of port which userspace does
not know about. Port add message goes right after.

This patch corrects message ordering so userspace would not be confused.
Signed-off-by: default avatarJiri Pirko <jpirko@redhat.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent 9b00cf2d
......@@ -347,24 +347,6 @@ void team_options_unregister(struct team *team,
}
EXPORT_SYMBOL(team_options_unregister);
static int team_option_port_add(struct team *team, struct team_port *port)
{
int err;
err = __team_option_inst_add_port(team, port);
if (err)
return err;
__team_options_change_check(team);
return 0;
}
static void team_option_port_del(struct team *team, struct team_port *port)
{
__team_option_inst_mark_removed_port(team, port);
__team_options_change_check(team);
__team_option_inst_del_port(team, port);
}
static int team_option_get(struct team *team,
struct team_option_inst *opt_inst,
struct team_gsetter_ctx *ctx)
......@@ -891,7 +873,7 @@ static int team_port_add(struct team *team, struct net_device *port_dev)
goto err_handler_register;
}
err = team_option_port_add(team, port);
err = __team_option_inst_add_port(team, port);
if (err) {
netdev_err(dev, "Device %s failed to add per-port options\n",
portname);
......@@ -904,6 +886,7 @@ static int team_port_add(struct team *team, struct net_device *port_dev)
team_adjust_ops(team);
__team_compute_features(team);
__team_port_change_check(port, !!netif_carrier_ok(port_dev));
__team_options_change_check(team);
netdev_info(dev, "Port device %s added\n", portname);
......@@ -947,12 +930,14 @@ static int team_port_del(struct team *team, struct net_device *port_dev)
return -ENOENT;
}
__team_option_inst_mark_removed_port(team, port);
__team_options_change_check(team);
__team_option_inst_del_port(team, port);
port->removed = true;
__team_port_change_check(port, false);
team_port_disable(team, port);
list_del_rcu(&port->list);
team_adjust_ops(team);
team_option_port_del(team, port);
netdev_rx_handler_unregister(port_dev);
netdev_set_master(port_dev, NULL);
vlan_vids_del_by_dev(port_dev, dev);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment