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