summaryrefslogtreecommitdiffstats
path: root/net/bridge/br_device.c
diff options
context:
space:
mode:
authorNikolay Aleksandrov <nikolay@cumulusnetworks.com>2018-03-30 13:46:18 +0300
committerDavid S. Miller <davem@davemloft.net>2018-03-31 22:19:00 -0400
commitf40aa23339e2d06b1a8daaece5a511bb1c4f704c (patch)
treec1033f88e7bf84405963f22fc664f2692aee2769 /net/bridge/br_device.c
parent56c03cbf8c4cbd413a19e8541850b0f02958fdcb (diff)
downloadlinux-f40aa23339e2d06b1a8daaece5a511bb1c4f704c.tar.gz
linux-f40aa23339e2d06b1a8daaece5a511bb1c4f704c.tar.bz2
linux-f40aa23339e2d06b1a8daaece5a511bb1c4f704c.zip
net: bridge: set min MTU on port events and allow user to set max
Recently the bridge was changed to automatically set maximum MTU on port events (add/del/changemtu) when vlan filtering is enabled, but that actually changes behaviour in a way which breaks some setups and can lead to packet drops. In order to still allow that maximum to be set while being compatible, we add the ability for the user to tune the bridge MTU up to the maximum when vlan filtering is enabled, but that has to be done explicitly and all port events (add/del/changemtu) lead to resetting that MTU to the minimum as before. Suggested-by: Roopa Prabhu <roopa@cumulusnetworks.com> Signed-off-by: Nikolay Aleksandrov <nikolay@cumulusnetworks.com> Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'net/bridge/br_device.c')
-rw-r--r--net/bridge/br_device.c3
1 files changed, 2 insertions, 1 deletions
diff --git a/net/bridge/br_device.c b/net/bridge/br_device.c
index 278fc999d355..edb9967eb165 100644
--- a/net/bridge/br_device.c
+++ b/net/bridge/br_device.c
@@ -224,7 +224,8 @@ static void br_get_stats64(struct net_device *dev,
static int br_change_mtu(struct net_device *dev, int new_mtu)
{
struct net_bridge *br = netdev_priv(dev);
- if (new_mtu > br_mtu(br))
+
+ if (new_mtu > br_mtu(br, br_vlan_enabled(dev)))
return -EINVAL;
dev->mtu = new_mtu;