|
@@ -78,7 +78,6 @@ int ipv6_sock_ac_join(struct sock *sk, int ifindex, const struct in6_addr *addr)
|
|
|
pac->acl_addr = *addr;
|
|
|
|
|
|
rtnl_lock();
|
|
|
- rcu_read_lock();
|
|
|
if (ifindex == 0) {
|
|
|
struct rt6_info *rt;
|
|
|
|
|
@@ -91,11 +90,11 @@ int ipv6_sock_ac_join(struct sock *sk, int ifindex, const struct in6_addr *addr)
|
|
|
goto error;
|
|
|
} else {
|
|
|
/* router, no matching interface: just pick one */
|
|
|
- dev = dev_get_by_flags_rcu(net, IFF_UP,
|
|
|
- IFF_UP | IFF_LOOPBACK);
|
|
|
+ dev = __dev_get_by_flags(net, IFF_UP,
|
|
|
+ IFF_UP | IFF_LOOPBACK);
|
|
|
}
|
|
|
} else
|
|
|
- dev = dev_get_by_index_rcu(net, ifindex);
|
|
|
+ dev = __dev_get_by_index(net, ifindex);
|
|
|
|
|
|
if (dev == NULL) {
|
|
|
err = -ENODEV;
|
|
@@ -137,7 +136,6 @@ int ipv6_sock_ac_join(struct sock *sk, int ifindex, const struct in6_addr *addr)
|
|
|
}
|
|
|
|
|
|
error:
|
|
|
- rcu_read_unlock();
|
|
|
rtnl_unlock();
|
|
|
if (pac)
|
|
|
sock_kfree_s(sk, pac, sizeof(*pac));
|
|
@@ -174,11 +172,9 @@ int ipv6_sock_ac_drop(struct sock *sk, int ifindex, const struct in6_addr *addr)
|
|
|
spin_unlock_bh(&ipv6_sk_ac_lock);
|
|
|
|
|
|
rtnl_lock();
|
|
|
- rcu_read_lock();
|
|
|
- dev = dev_get_by_index_rcu(net, pac->acl_ifindex);
|
|
|
+ dev = __dev_get_by_index(net, pac->acl_ifindex);
|
|
|
if (dev)
|
|
|
ipv6_dev_ac_dec(dev, &pac->acl_addr);
|
|
|
- rcu_read_unlock();
|
|
|
rtnl_unlock();
|
|
|
|
|
|
sock_kfree_s(sk, pac, sizeof(*pac));
|
|
@@ -203,12 +199,11 @@ void ipv6_sock_ac_close(struct sock *sk)
|
|
|
|
|
|
prev_index = 0;
|
|
|
rtnl_lock();
|
|
|
- rcu_read_lock();
|
|
|
while (pac) {
|
|
|
struct ipv6_ac_socklist *next = pac->acl_next;
|
|
|
|
|
|
if (pac->acl_ifindex != prev_index) {
|
|
|
- dev = dev_get_by_index_rcu(net, pac->acl_ifindex);
|
|
|
+ dev = __dev_get_by_index(net, pac->acl_ifindex);
|
|
|
prev_index = pac->acl_ifindex;
|
|
|
}
|
|
|
if (dev)
|
|
@@ -216,7 +211,6 @@ void ipv6_sock_ac_close(struct sock *sk)
|
|
|
sock_kfree_s(sk, pac, sizeof(*pac));
|
|
|
pac = next;
|
|
|
}
|
|
|
- rcu_read_unlock();
|
|
|
rtnl_unlock();
|
|
|
}
|
|
|
|
|
@@ -341,7 +335,7 @@ int __ipv6_dev_ac_dec(struct inet6_dev *idev, const struct in6_addr *addr)
|
|
|
return 0;
|
|
|
}
|
|
|
|
|
|
-/* called with rcu_read_lock() */
|
|
|
+/* called with rtnl_lock() */
|
|
|
static int ipv6_dev_ac_dec(struct net_device *dev, const struct in6_addr *addr)
|
|
|
{
|
|
|
struct inet6_dev *idev = __in6_dev_get(dev);
|