Unified · Split
| @@ -274,7 +274,7 @@ static void destroy_nbp(struct net_bridge_port *p) · 273 unmodified lines | |||
| 274 | 274 | ||
| 275 | p->br = NULL; | 275 | p->br = NULL; |
| 276 | p->dev = NULL; | 276 | p->dev = NULL; |
| 277 | dev_put(dev); | 277 | dev_put_track(dev, &p->dev_tracker); |
| 278 | 278 | ||
| 279 | kobject_put(&p->kobj); | 279 | kobject_put(&p->kobj); |
| 280 | } | 280 | } |
| @@ -423,7 +423,7 @@ static struct net_bridge_port *new_nbp(struct net_bridge *br, · 142 unmodified lines | |||
| 423 | return ERR_PTR(-ENOMEM); | 423 | return ERR_PTR(-ENOMEM); |
| 424 | 424 | ||
| 425 | p->br = br; | 425 | p->br = br; |
| 426 | dev_hold(dev); | 426 | dev_hold_track(dev, &p->dev_tracker, GFP_KERNEL); |
| 427 | p->dev = dev; | 427 | p->dev = dev; |
| 428 | p->path_cost = port_cost(dev); | 428 | p->path_cost = port_cost(dev); |
| 429 | p->priority = 0x8000 >> BR_PORT_BITS; | 429 | p->priority = 0x8000 >> BR_PORT_BITS; |
| @@ -434,7 +434,7 @@ static struct net_bridge_port *new_nbp(struct net_bridge *br, · 4 unmodified lines | |||
| 434 | br_stp_port_timer_init(p); | 434 | br_stp_port_timer_init(p); |
| 435 | err = br_multicast_add_port(p); | 435 | err = br_multicast_add_port(p); |
| 436 | if (err) { | 436 | if (err) { |
| 437 | dev_put(dev); | 437 | dev_put_track(dev, &p->dev_tracker); |
| 438 | kfree(p); | 438 | kfree(p); |
| 439 | p = ERR_PTR(err); | 439 | p = ERR_PTR(err); |
| 440 | } | 440 | } |
| @@ -344,6 +344,7 @@ struct net_bridge_mdb_entry { · 343 unmodified lines | |||
| 344 | struct net_bridge_port { | 344 | struct net_bridge_port { |
| 345 | struct net_bridge *br; | 345 | struct net_bridge *br; |
| 346 | struct net_device *dev; | 346 | struct net_device *dev; |
| 347 | netdevice_tracker dev_tracker; | ||
| 347 | struct list_head list; | 348 | struct list_head list; |
| 348 | 349 | ||
| 349 | unsigned long flags; | 350 | unsigned long flags; |