--- /dev/null
+From 08474cc1e6ea71237cab7e4a651a623c9dea1084 Mon Sep 17 00:00:00 2001
+From: Elad Raz <eladr@mellanox.com>
+Date: Wed, 6 Jan 2016 13:01:04 +0100
+Subject: bridge: Propagate vlan add failure to user
+
+From: Elad Raz <eladr@mellanox.com>
+
+commit 08474cc1e6ea71237cab7e4a651a623c9dea1084 upstream.
+
+Disallow adding interfaces to a bridge when vlan filtering operation
+failed. Send the failure code to the user.
+
+Signed-off-by: Elad Raz <eladr@mellanox.com>
+Signed-off-by: Jiri Pirko <jiri@mellanox.com>
+Signed-off-by: David S. Miller <davem@davemloft.net>
+Signed-off-by: SZ Lin (林上智) <sz.lin@moxa.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ net/bridge/br_if.c | 11 ++++++++++-
+ 1 file changed, 10 insertions(+), 1 deletion(-)
+
+--- a/net/bridge/br_if.c
++++ b/net/bridge/br_if.c
+@@ -511,8 +511,11 @@ int br_add_if(struct net_bridge *br, str
+ if (br_fdb_insert(br, p, dev->dev_addr, 0))
+ netdev_err(dev, "failed insert local address bridge forwarding table\n");
+
+- if (nbp_vlan_init(p))
++ err = nbp_vlan_init(p);
++ if (err) {
+ netdev_err(dev, "failed to initialize vlan filtering on this port\n");
++ goto err6;
++ }
+
+ spin_lock_bh(&br->lock);
+ changed_addr = br_stp_recalculate_bridge_id(br);
+@@ -533,6 +536,12 @@ int br_add_if(struct net_bridge *br, str
+
+ return 0;
+
++err6:
++ list_del_rcu(&p->list);
++ br_fdb_delete_by_port(br, p, 0, 1);
++ nbp_update_port_count(br);
++ netdev_upper_dev_unlink(dev, br->dev);
++
+ err5:
+ dev->priv_flags &= ~IFF_BRIDGE_PORT;
+ netdev_rx_handler_unregister(dev);