|
@@ -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 @@ err2:
|
|
|
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;
|
|
|
}
|
|
|
|