From 33c73892eaab32ffa1c86088717996a00eda6cf9 Mon Sep 17 00:00:00 2001 From: Nikolay Aleksandrov Date: Mon, 5 Oct 2026 17:39:34 +0300 Subject: [PATCH] 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 Reviewed-by: Ido Schimmel Link: https://patch.msgid.link/20261005143937.877466-4-razor@blackwall.org Signed-off-by: Jakub Kicinski --- net/bridge/br_vlan.c | 19 +++++++------------ 1 file changed, 7 insertions(+), 12 deletions(-) diff --git a/net/bridge/br_vlan.c b/net/bridge/br_vlan.c index 0675f74cf1b9..dcf783e1a440 100644 --- a/net/bridge/br_vlan.c +++ b/net/bridge/br_vlan.c @@ -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,