aboutsummaryrefslogtreecommitdiffstats
path: root/net/dsa/port.c
diff options
context:
space:
mode:
Diffstat (limited to 'net/dsa/port.c')
-rw-r--r--net/dsa/port.c12
1 files changed, 9 insertions, 3 deletions
diff --git a/net/dsa/port.c b/net/dsa/port.c
index e9b5b50f8cf1..c011dff523d0 100644
--- a/net/dsa/port.c
+++ b/net/dsa/port.c
@@ -291,7 +291,10 @@ int dsa_port_vlan_add(struct dsa_port *dp,
291 .vlan = vlan, 291 .vlan = vlan,
292 }; 292 };
293 293
294 if (br_vlan_enabled(dp->bridge_dev)) 294 /* Can be called from dsa_slave_port_obj_add() or
295 * dsa_slave_vlan_rx_add_vid()
296 */
297 if (!dp->bridge_dev || br_vlan_enabled(dp->bridge_dev))
295 return dsa_port_notify(dp, DSA_NOTIFIER_VLAN_ADD, &info); 298 return dsa_port_notify(dp, DSA_NOTIFIER_VLAN_ADD, &info);
296 299
297 return 0; 300 return 0;
@@ -306,10 +309,13 @@ int dsa_port_vlan_del(struct dsa_port *dp,
306 .vlan = vlan, 309 .vlan = vlan,
307 }; 310 };
308 311
309 if (netif_is_bridge_master(vlan->obj.orig_dev)) 312 if (vlan->obj.orig_dev && netif_is_bridge_master(vlan->obj.orig_dev))
310 return -EOPNOTSUPP; 313 return -EOPNOTSUPP;
311 314
312 if (br_vlan_enabled(dp->bridge_dev)) 315 /* Can be called from dsa_slave_port_obj_del() or
316 * dsa_slave_vlan_rx_kill_vid()
317 */
318 if (!dp->bridge_dev || br_vlan_enabled(dp->bridge_dev))
313 return dsa_port_notify(dp, DSA_NOTIFIER_VLAN_DEL, &info); 319 return dsa_port_notify(dp, DSA_NOTIFIER_VLAN_DEL, &info);
314 320
315 return 0; 321 return 0;