net: bridge: vlan: share VLAN validation in br_should_learn

Both the pvid and tagged paths now resolve a VLAN entry. Select the entry
first and share the state check and output assignment.

Signed-off-by: Nikolay Aleksandrov <razor@blackwall.org>
Reviewed-by: Ido Schimmel <idosch@nvidia.com>
Link: https://patch.msgid.link/20261005143937.877466-4-razor@blackwall.org
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
This commit is contained in:
Nikolay Aleksandrov 2026-10-05 17:39:34 +03:00 committed by Jakub Kicinski
parent 6317ffc9bd
commit 33c73892ea

View File

@ -742,21 +742,16 @@ bool br_should_learn(struct net_bridge_port *p, struct sk_buff *skb,
if (!br_vlan_get_tag(skb, &vid) && skb->vlan_proto != br->vlan_proto)
vid = 0;
if (!vid) {
if (vid)
v = br_vlan_find(vg, vid);
else
v = rcu_dereference(vg->pvid);
if (!v || !br_vlan_state_allowed(br_vlan_get_state(v), true))
return false;
*vlan = v;
return true;
}
v = br_vlan_find(vg, vid);
if (v && br_vlan_state_allowed(br_vlan_get_state(v), true)) {
*vlan = v;
return true;
}
if (!v || !br_vlan_state_allowed(br_vlan_get_state(v), true))
return false;
return false;
*vlan = v;
return true;
}
static int br_vlan_add_existing(struct net_bridge *br,