diff options
-rw-r--r-- | drivers/net/team/team_mode_activebackup.c | 7 | ||||
-rw-r--r-- | drivers/net/team/team_mode_loadbalance.c | 8 |
2 files changed, 10 insertions, 5 deletions
diff --git a/drivers/net/team/team_mode_activebackup.c b/drivers/net/team/team_mode_activebackup.c index 2fe02a8713ea..c9e7621b4480 100644 --- a/drivers/net/team/team_mode_activebackup.c +++ b/drivers/net/team/team_mode_activebackup.c | |||
@@ -61,8 +61,11 @@ static void ab_port_leave(struct team *team, struct team_port *port) | |||
61 | 61 | ||
62 | static int ab_active_port_get(struct team *team, struct team_gsetter_ctx *ctx) | 62 | static int ab_active_port_get(struct team *team, struct team_gsetter_ctx *ctx) |
63 | { | 63 | { |
64 | if (ab_priv(team)->active_port) | 64 | struct team_port *active_port; |
65 | ctx->data.u32_val = ab_priv(team)->active_port->dev->ifindex; | 65 | |
66 | active_port = rcu_access_pointer(ab_priv(team)->active_port); | ||
67 | if (active_port) | ||
68 | ctx->data.u32_val = active_port->dev->ifindex; | ||
66 | else | 69 | else |
67 | ctx->data.u32_val = 0; | 70 | ctx->data.u32_val = 0; |
68 | return 0; | 71 | return 0; |
diff --git a/drivers/net/team/team_mode_loadbalance.c b/drivers/net/team/team_mode_loadbalance.c index 45cc0951aa48..b4475a5d2d4b 100644 --- a/drivers/net/team/team_mode_loadbalance.c +++ b/drivers/net/team/team_mode_loadbalance.c | |||
@@ -96,7 +96,7 @@ static void lb_tx_hash_to_port_mapping_null_port(struct team *team, | |||
96 | struct lb_port_mapping *pm; | 96 | struct lb_port_mapping *pm; |
97 | 97 | ||
98 | pm = &lb_priv->ex->tx_hash_to_port_mapping[i]; | 98 | pm = &lb_priv->ex->tx_hash_to_port_mapping[i]; |
99 | if (pm->port == port) { | 99 | if (rcu_access_pointer(pm->port) == port) { |
100 | rcu_assign_pointer(pm->port, NULL); | 100 | rcu_assign_pointer(pm->port, NULL); |
101 | team_option_inst_set_change(pm->opt_inst_info); | 101 | team_option_inst_set_change(pm->opt_inst_info); |
102 | changed = true; | 102 | changed = true; |
@@ -292,7 +292,7 @@ static int lb_bpf_func_set(struct team *team, struct team_gsetter_ctx *ctx) | |||
292 | if (lb_priv->ex->orig_fprog) { | 292 | if (lb_priv->ex->orig_fprog) { |
293 | /* Clear old filter data */ | 293 | /* Clear old filter data */ |
294 | __fprog_destroy(lb_priv->ex->orig_fprog); | 294 | __fprog_destroy(lb_priv->ex->orig_fprog); |
295 | sk_unattached_filter_destroy(lb_priv->fp); | 295 | sk_unattached_filter_destroy(rcu_access_pointer(lb_priv->fp)); |
296 | } | 296 | } |
297 | 297 | ||
298 | rcu_assign_pointer(lb_priv->fp, fp); | 298 | rcu_assign_pointer(lb_priv->fp, fp); |
@@ -303,9 +303,11 @@ static int lb_bpf_func_set(struct team *team, struct team_gsetter_ctx *ctx) | |||
303 | static int lb_tx_method_get(struct team *team, struct team_gsetter_ctx *ctx) | 303 | static int lb_tx_method_get(struct team *team, struct team_gsetter_ctx *ctx) |
304 | { | 304 | { |
305 | struct lb_priv *lb_priv = get_lb_priv(team); | 305 | struct lb_priv *lb_priv = get_lb_priv(team); |
306 | lb_select_tx_port_func_t *func; | ||
306 | char *name; | 307 | char *name; |
307 | 308 | ||
308 | name = lb_select_tx_port_get_name(lb_priv->select_tx_port_func); | 309 | func = rcu_access_pointer(lb_priv->select_tx_port_func); |
310 | name = lb_select_tx_port_get_name(func); | ||
309 | BUG_ON(!name); | 311 | BUG_ON(!name); |
310 | ctx->data.str_val = name; | 312 | ctx->data.str_val = name; |
311 | return 0; | 313 | return 0; |