diff options
author | Toshiaki Makita <makita.toshiaki@lab.ntt.co.jp> | 2013-10-16 08:07:15 (GMT) |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2013-10-18 20:02:53 (GMT) |
commit | d1c6c708c4da9d104e0b7c116654cb449bff9b5f (patch) | |
tree | a5e02f92b9491d1eb7be0b6b52b78ff3af16484c | |
parent | b90356ce17c2b199cd55530cb9c3cfabe18dbdc3 (diff) | |
download | linux-fsl-qoriq-d1c6c708c4da9d104e0b7c116654cb449bff9b5f.tar.xz |
bridge: Fix the way the PVID is referenced
We are using the VLAN_TAG_PRESENT bit to detect whether the PVID is
set or not at br_get_pvid(), while we don't care about the bit in
adding/deleting the PVID, which makes it impossible to forward any
incomming untagged frame with vlan_filtering enabled.
Since vid 0 cannot be used for the PVID, we can use vid 0 to indicate
that the PVID is not set, which is slightly more efficient than using
the VLAN_TAG_PRESENT.
Fix the problem by getting rid of using the VLAN_TAG_PRESENT.
Signed-off-by: Toshiaki Makita <makita.toshiaki@lab.ntt.co.jp>
Reviewed-by: Vlad Yasevich <vyasevic@redhat.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
-rw-r--r-- | net/bridge/br_private.h | 4 |
1 files changed, 1 insertions, 3 deletions
diff --git a/net/bridge/br_private.h b/net/bridge/br_private.h index efb57d9..7ca2ae4 100644 --- a/net/bridge/br_private.h +++ b/net/bridge/br_private.h @@ -643,9 +643,7 @@ static inline u16 br_get_pvid(const struct net_port_vlans *v) * vid wasn't set */ smp_rmb(); - return (v->pvid & VLAN_TAG_PRESENT) ? - (v->pvid & ~VLAN_TAG_PRESENT) : - VLAN_N_VID; + return v->pvid ?: VLAN_N_VID; } #else |