Skip to content

Commit e51b962

Browse files
edumazetdavem330
authored andcommitted
net: remove dev_base_lock from register_netdevice() and friends.
RTNL already protects writes to dev->reg_state, we no longer need to hold dev_base_lock to protect the readers. unlist_netdevice() second argument can be removed. Signed-off-by: Eric Dumazet <[email protected]> Signed-off-by: David S. Miller <[email protected]>
1 parent 2dd4d82 commit e51b962

File tree

1 file changed

+7
-13
lines changed

1 file changed

+7
-13
lines changed

net/core/dev.c

Lines changed: 7 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -414,7 +414,7 @@ static void list_netdevice(struct net_device *dev)
414414
/* Device list removal
415415
* caller must respect a RCU grace period before freeing/reusing dev
416416
*/
417-
static void unlist_netdevice(struct net_device *dev, bool lock)
417+
static void unlist_netdevice(struct net_device *dev)
418418
{
419419
struct netdev_name_node *name_node;
420420
struct net *net = dev_net(dev);
@@ -427,13 +427,11 @@ static void unlist_netdevice(struct net_device *dev, bool lock)
427427
netdev_name_node_del(name_node);
428428

429429
/* Unlink dev from the device chain */
430-
if (lock)
431-
write_lock(&dev_base_lock);
430+
write_lock(&dev_base_lock);
432431
list_del_rcu(&dev->dev_list);
433432
netdev_name_node_del(dev->name_node);
434433
hlist_del_rcu(&dev->index_hlist);
435-
if (lock)
436-
write_unlock(&dev_base_lock);
434+
write_unlock(&dev_base_lock);
437435

438436
dev_base_seq_inc(dev_net(dev));
439437
}
@@ -10338,9 +10336,9 @@ int register_netdevice(struct net_device *dev)
1033810336
goto err_ifindex_release;
1033910337

1034010338
ret = netdev_register_kobject(dev);
10341-
write_lock(&dev_base_lock);
10339+
1034210340
WRITE_ONCE(dev->reg_state, ret ? NETREG_UNREGISTERED : NETREG_REGISTERED);
10343-
write_unlock(&dev_base_lock);
10341+
1034410342
if (ret)
1034510343
goto err_uninit_notify;
1034610344

@@ -10629,9 +10627,7 @@ void netdev_run_todo(void)
1062910627
continue;
1063010628
}
1063110629

10632-
write_lock(&dev_base_lock);
1063310630
WRITE_ONCE(dev->reg_state, NETREG_UNREGISTERED);
10634-
write_unlock(&dev_base_lock);
1063510631
linkwatch_sync_dev(dev);
1063610632
}
1063710633

@@ -11138,10 +11134,8 @@ void unregister_netdevice_many_notify(struct list_head *head,
1113811134

1113911135
list_for_each_entry(dev, head, unreg_list) {
1114011136
/* And unlink it from device chain. */
11141-
write_lock(&dev_base_lock);
11142-
unlist_netdevice(dev, false);
11137+
unlist_netdevice(dev);
1114311138
WRITE_ONCE(dev->reg_state, NETREG_UNREGISTERING);
11144-
write_unlock(&dev_base_lock);
1114511139
}
1114611140
flush_all_backlogs();
1114711141

@@ -11323,7 +11317,7 @@ int __dev_change_net_namespace(struct net_device *dev, struct net *net,
1132311317
dev_close(dev);
1132411318

1132511319
/* And unlink it from device chain */
11326-
unlist_netdevice(dev, true);
11320+
unlist_netdevice(dev);
1132711321

1132811322
synchronize_net();
1132911323

0 commit comments

Comments
 (0)