ip: Router Alert RCU conversion
Straightforward conversion to RCU. One rwlock becomes a spinlock, and is static. Signed-off-by: Eric Dumazet <eric.dumazet@gmail.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:

committed by
David S. Miller

parent
8b37ef0a1f
commit
66018506e1
@@ -146,7 +146,7 @@
|
||||
#include <linux/netlink.h>
|
||||
|
||||
/*
|
||||
* Process Router Attention IP option
|
||||
* Process Router Attention IP option (RFC 2113)
|
||||
*/
|
||||
int ip_call_ra_chain(struct sk_buff *skb)
|
||||
{
|
||||
@@ -155,8 +155,7 @@ int ip_call_ra_chain(struct sk_buff *skb)
|
||||
struct sock *last = NULL;
|
||||
struct net_device *dev = skb->dev;
|
||||
|
||||
read_lock(&ip_ra_lock);
|
||||
for (ra = ip_ra_chain; ra; ra = ra->next) {
|
||||
for (ra = rcu_dereference(ip_ra_chain); ra; ra = rcu_dereference(ra->next)) {
|
||||
struct sock *sk = ra->sk;
|
||||
|
||||
/* If socket is bound to an interface, only report
|
||||
@@ -167,10 +166,8 @@ int ip_call_ra_chain(struct sk_buff *skb)
|
||||
sk->sk_bound_dev_if == dev->ifindex) &&
|
||||
net_eq(sock_net(sk), dev_net(dev))) {
|
||||
if (ip_hdr(skb)->frag_off & htons(IP_MF | IP_OFFSET)) {
|
||||
if (ip_defrag(skb, IP_DEFRAG_CALL_RA_CHAIN)) {
|
||||
read_unlock(&ip_ra_lock);
|
||||
if (ip_defrag(skb, IP_DEFRAG_CALL_RA_CHAIN))
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
if (last) {
|
||||
struct sk_buff *skb2 = skb_clone(skb, GFP_ATOMIC);
|
||||
@@ -183,10 +180,8 @@ int ip_call_ra_chain(struct sk_buff *skb)
|
||||
|
||||
if (last) {
|
||||
raw_rcv(last, skb);
|
||||
read_unlock(&ip_ra_lock);
|
||||
return 1;
|
||||
}
|
||||
read_unlock(&ip_ra_lock);
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user