summaryrefslogtreecommitdiffstats
path: root/net
diff options
context:
space:
mode:
authorToshiaki Makita <makita.toshiaki@lab.ntt.co.jp>2013-10-16 17:07:15 +0900
committerDavid S. Miller <davem@davemloft.net>2013-10-18 16:02:53 -0400
commitd1c6c708c4da9d104e0b7c116654cb449bff9b5f (patch)
treea5e02f92b9491d1eb7be0b6b52b78ff3af16484c /net
parentb90356ce17c2b199cd55530cb9c3cfabe18dbdc3 (diff)
downloadlinux-stable-d1c6c708c4da9d104e0b7c116654cb449bff9b5f.tar.gz
linux-stable-d1c6c708c4da9d104e0b7c116654cb449bff9b5f.tar.bz2
linux-stable-d1c6c708c4da9d104e0b7c116654cb449bff9b5f.zip
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>
Diffstat (limited to 'net')
-rw-r--r--net/bridge/br_private.h4
1 files changed, 1 insertions, 3 deletions
diff --git a/net/bridge/br_private.h b/net/bridge/br_private.h
index efb57d911569..7ca2ae45b2d5 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