summaryrefslogtreecommitdiff
path: root/bridge.c
diff options
context:
space:
mode:
authorFelix Fietkau <nbd@nbd.name>2021-06-02 18:23:40 +0200
committerFelix Fietkau <nbd@nbd.name>2021-06-02 18:23:47 +0200
commitcb6ee9608e10029875389092140de65fa6a66714 (patch)
tree08e7cad4db694efb8079888c317f36975c7d96b6 /bridge.c
parent61a71e5e49c3be8b0846c63bee001ab34c4f4da7 (diff)
downloadnetifd-cb6ee9608e10029875389092140de65fa6a66714.tar.gz
bridge: fix dynamic delete of hotplug vlans
Signed-off-by: Felix Fietkau <nbd@nbd.name>
Diffstat (limited to 'bridge.c')
-rw-r--r--bridge.c4
1 files changed, 3 insertions, 1 deletions
diff --git a/bridge.c b/bridge.c
index b336463..04a9abf 100644
--- a/bridge.c
+++ b/bridge.c
@@ -450,6 +450,7 @@ bridge_free_member(struct bridge_member *bm)
bridge_remove_member(bm);
+restart:
vlist_for_each_element(&bst->dev.vlans, vlan, node) {
struct bridge_vlan_hotplug_port *port, *tmp;
bool free_port = false;
@@ -468,6 +469,7 @@ bridge_free_member(struct bridge_member *bm)
continue;
vlist_delete(&bst->dev.vlans, &vlan->node);
+ goto restart;
}
device_lock();
@@ -697,9 +699,9 @@ bridge_hotplug_get_vlan(struct bridge_state *bst, unsigned int vid)
vlan = calloc(1, sizeof(*vlan));
vlan->vid = vid;
vlan->local = true;
- vlan->node.version = -1;
INIT_LIST_HEAD(&vlan->hotplug_ports);
vlist_add(&bst->dev.vlans, &vlan->node, &vlan->vid);
+ vlan->node.version = -1;
return vlan;
}