diff --git a/[refs] b/[refs] index 576b961b9965..66af3b060136 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 7e1a1ac1fbaa88fe254400b7f30b775502932ad3 +refs/heads/master: bc3f9076f671f128c82022428992c30be57f22d5 diff --git a/trunk/net/bridge/br_if.c b/trunk/net/bridge/br_if.c index 497df086141a..a072ea5ca6f5 100644 --- a/trunk/net/bridge/br_if.c +++ b/trunk/net/bridge/br_if.c @@ -373,6 +373,10 @@ int br_add_if(struct net_bridge *br, struct net_device *dev) if (IS_ERR(p)) return PTR_ERR(p); + err = dev_set_promiscuity(dev, 1); + if (err) + goto put_back; + err = kobject_init_and_add(&p->kobj, &brport_ktype, &(dev->dev.kobj), SYSFS_BRIDGE_PORT_ATTR); if (err) @@ -388,7 +392,6 @@ int br_add_if(struct net_bridge *br, struct net_device *dev) rcu_assign_pointer(dev->br_port, p); dev_disable_lro(dev); - dev_set_promiscuity(dev, 1); list_add_rcu(&p->list, &br->port_list); @@ -412,12 +415,12 @@ int br_add_if(struct net_bridge *br, struct net_device *dev) br_fdb_delete_by_port(br, p, 1); err1: kobject_del(&p->kobj); - goto put_back; err0: kobject_put(&p->kobj); - + dev_set_promiscuity(dev, -1); put_back: dev_put(dev); + kfree(p); return err; }