decnet: RCU conversion and get rid of dev_base_lock
While tracking dev_base_lock users, I found decnet used it in dnet_select_source(), but for a wrong purpose: Writers only hold RTNL, not dev_base_lock, so readers must use RCU if they cannot use RTNL. Adds an rcu_head in struct dn_ifaddr and handle proper RCU management. Adds __rcu annotation in dn_route as well. Signed-off-by: Eric Dumazet <eric.dumazet@gmail.com> Acked-by: Steven Whitehouse <swhiteho@redhat.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:

committed by
David S. Miller

parent
e4a7b93bd5
commit
fc766e4c49
@@ -610,10 +610,12 @@ static void dn_fib_del_ifaddr(struct dn_ifaddr *ifa)
|
||||
/* Scan device list */
|
||||
rcu_read_lock();
|
||||
for_each_netdev_rcu(&init_net, dev) {
|
||||
dn_db = dev->dn_ptr;
|
||||
dn_db = rcu_dereference(dev->dn_ptr);
|
||||
if (dn_db == NULL)
|
||||
continue;
|
||||
for(ifa2 = dn_db->ifa_list; ifa2; ifa2 = ifa2->ifa_next) {
|
||||
for (ifa2 = rcu_dereference(dn_db->ifa_list);
|
||||
ifa2 != NULL;
|
||||
ifa2 = rcu_dereference(ifa2->ifa_next)) {
|
||||
if (ifa2->ifa_local == ifa->ifa_local) {
|
||||
found_it = 1;
|
||||
break;
|
||||
|
Reference in New Issue
Block a user