소스 검색

bridge: fix regression in bringing up bridge ports

Move the DEV_EVENT_LINK_UP case to avoid messing with a fallthrough
Only restart members if the vlan check returns a positive result

Fixes: 85f01c44a950 ("bridge: check bridge port vlan membership on link-up events")
Signed-off-by: Felix Fietkau <nbd@nbd.name>
Felix Fietkau 2 년 전
부모
커밋
440eb06477
1개의 변경된 파일5개의 추가작업 그리고 4개의 파일을 삭제
  1. 5 4
      bridge.c

+ 5 - 4
bridge.c

@@ -510,7 +510,7 @@ bridge_member_check_cb(struct uloop_timeout *t)
 	bm = container_of(t, struct bridge_member, check_timer);
 	bst = bm->bst;
 
-	if (!system_bridge_vlan_check(&bst->dev, bm->dev.dev->ifname))
+	if (system_bridge_vlan_check(&bst->dev, bm->dev.dev->ifname) <= 0)
 		return;
 
 	bridge_disable_member(bm, true);
@@ -534,9 +534,6 @@ bridge_member_cb(struct device_user *dep, enum device_event ev)
 		if (bst->n_present == 1)
 			device_set_present(&bst->dev, true);
 		fallthrough;
-	case DEV_EVENT_LINK_UP:
-		uloop_timeout_set(&bm->check_timer, 1000);
-		break;
 	case DEV_EVENT_AUTH_UP:
 		if (!bst->dev.active)
 			break;
@@ -552,6 +549,10 @@ bridge_member_cb(struct device_user *dep, enum device_event ev)
 		system_if_apply_settings(&bst->dev, &bst->dev.settings,
 					 DEV_OPT_MTU | DEV_OPT_MTU6);
 		break;
+	case DEV_EVENT_LINK_UP:
+		if (bst->has_vlans)
+			uloop_timeout_set(&bm->check_timer, 1000);
+		break;
 	case DEV_EVENT_LINK_DOWN:
 		if (!dev->settings.auth)
 			break;