diff options
Diffstat (limited to 'net/bridge/br_if.c')
| -rw-r--r-- | net/bridge/br_if.c | 15 |
1 files changed, 8 insertions, 7 deletions
diff --git a/net/bridge/br_if.c b/net/bridge/br_if.c index 63c18aacde8c..573e20f7dba4 100644 --- a/net/bridge/br_if.c +++ b/net/bridge/br_if.c | |||
| @@ -168,7 +168,7 @@ static void del_br(struct net_bridge *br) | |||
| 168 | unregister_netdevice(br->dev); | 168 | unregister_netdevice(br->dev); |
| 169 | } | 169 | } |
| 170 | 170 | ||
| 171 | static struct net_device *new_bridge_dev(const char *name) | 171 | static struct net_device *new_bridge_dev(struct net *net, const char *name) |
| 172 | { | 172 | { |
| 173 | struct net_bridge *br; | 173 | struct net_bridge *br; |
| 174 | struct net_device *dev; | 174 | struct net_device *dev; |
| @@ -178,6 +178,7 @@ static struct net_device *new_bridge_dev(const char *name) | |||
| 178 | 178 | ||
| 179 | if (!dev) | 179 | if (!dev) |
| 180 | return NULL; | 180 | return NULL; |
| 181 | dev_net_set(dev, net); | ||
| 181 | 182 | ||
| 182 | br = netdev_priv(dev); | 183 | br = netdev_priv(dev); |
| 183 | br->dev = dev; | 184 | br->dev = dev; |
| @@ -262,12 +263,12 @@ static struct net_bridge_port *new_nbp(struct net_bridge *br, | |||
| 262 | return p; | 263 | return p; |
| 263 | } | 264 | } |
| 264 | 265 | ||
| 265 | int br_add_bridge(const char *name) | 266 | int br_add_bridge(struct net *net, const char *name) |
| 266 | { | 267 | { |
| 267 | struct net_device *dev; | 268 | struct net_device *dev; |
| 268 | int ret; | 269 | int ret; |
| 269 | 270 | ||
| 270 | dev = new_bridge_dev(name); | 271 | dev = new_bridge_dev(net, name); |
| 271 | if (!dev) | 272 | if (!dev) |
| 272 | return -ENOMEM; | 273 | return -ENOMEM; |
| 273 | 274 | ||
| @@ -294,13 +295,13 @@ out_free: | |||
| 294 | goto out; | 295 | goto out; |
| 295 | } | 296 | } |
| 296 | 297 | ||
| 297 | int br_del_bridge(const char *name) | 298 | int br_del_bridge(struct net *net, const char *name) |
| 298 | { | 299 | { |
| 299 | struct net_device *dev; | 300 | struct net_device *dev; |
| 300 | int ret = 0; | 301 | int ret = 0; |
| 301 | 302 | ||
| 302 | rtnl_lock(); | 303 | rtnl_lock(); |
| 303 | dev = __dev_get_by_name(&init_net, name); | 304 | dev = __dev_get_by_name(net, name); |
| 304 | if (dev == NULL) | 305 | if (dev == NULL) |
| 305 | ret = -ENXIO; /* Could not find device */ | 306 | ret = -ENXIO; /* Could not find device */ |
| 306 | 307 | ||
| @@ -445,13 +446,13 @@ int br_del_if(struct net_bridge *br, struct net_device *dev) | |||
| 445 | return 0; | 446 | return 0; |
| 446 | } | 447 | } |
| 447 | 448 | ||
| 448 | void __exit br_cleanup_bridges(void) | 449 | void br_net_exit(struct net *net) |
| 449 | { | 450 | { |
| 450 | struct net_device *dev; | 451 | struct net_device *dev; |
| 451 | 452 | ||
| 452 | rtnl_lock(); | 453 | rtnl_lock(); |
| 453 | restart: | 454 | restart: |
| 454 | for_each_netdev(&init_net, dev) { | 455 | for_each_netdev(net, dev) { |
| 455 | if (dev->priv_flags & IFF_EBRIDGE) { | 456 | if (dev->priv_flags & IFF_EBRIDGE) { |
| 456 | del_br(dev->priv); | 457 | del_br(dev->priv); |
| 457 | goto restart; | 458 | goto restart; |
