diff options
| author | David S. Miller <davem@davemloft.net> | 2011-03-10 16:34:38 -0800 | 
|---|---|---|
| committer | David S. Miller <davem@davemloft.net> | 2011-03-10 16:37:26 -0800 | 
| commit | dbdd9a52e38a4a93adfa4d0278801cce4fad98eb (patch) | |
| tree | a223ba84f33976b0d2c17d3177cbe976a3c948fc | |
| parent | 33175d84ee3fa29991adb80513683e010769e807 (diff) | |
| download | olio-linux-3.10-dbdd9a52e38a4a93adfa4d0278801cce4fad98eb.tar.xz olio-linux-3.10-dbdd9a52e38a4a93adfa4d0278801cce4fad98eb.zip  | |
ipv4: Remove redundant RCU locking in ip_check_mc().
All callers are under rcu_read_lock() protection already.
Rename to ip_check_mc_rcu() to make it even more clear.
Signed-off-by: David S. Miller <davem@davemloft.net>
| -rw-r--r-- | include/linux/igmp.h | 2 | ||||
| -rw-r--r-- | net/ipv4/igmp.c | 5 | ||||
| -rw-r--r-- | net/ipv4/route.c | 8 | 
3 files changed, 7 insertions, 8 deletions
diff --git a/include/linux/igmp.h b/include/linux/igmp.h index 74cfcff0148..82de336b815 100644 --- a/include/linux/igmp.h +++ b/include/linux/igmp.h @@ -217,7 +217,7 @@ struct ip_mc_list {  #define IGMPV3_QQIC(value) IGMPV3_EXP(0x80, 4, 3, value)  #define IGMPV3_MRC(value) IGMPV3_EXP(0x80, 4, 3, value) -extern int ip_check_mc(struct in_device *dev, __be32 mc_addr, __be32 src_addr, u16 proto); +extern int ip_check_mc_rcu(struct in_device *dev, __be32 mc_addr, __be32 src_addr, u16 proto);  extern int igmp_rcv(struct sk_buff *);  extern int ip_mc_join_group(struct sock *sk, struct ip_mreqn *imr);  extern int ip_mc_leave_group(struct sock *sk, struct ip_mreqn *imr); diff --git a/net/ipv4/igmp.c b/net/ipv4/igmp.c index 44ba9068b72..12b65ccca8e 100644 --- a/net/ipv4/igmp.c +++ b/net/ipv4/igmp.c @@ -2333,13 +2333,13 @@ void ip_mc_drop_socket(struct sock *sk)  	rtnl_unlock();  } -int ip_check_mc(struct in_device *in_dev, __be32 mc_addr, __be32 src_addr, u16 proto) +/* called with rcu_read_lock() */ +int ip_check_mc_rcu(struct in_device *in_dev, __be32 mc_addr, __be32 src_addr, u16 proto)  {  	struct ip_mc_list *im;  	struct ip_sf_list *psf;  	int rv = 0; -	rcu_read_lock();  	for_each_pmc_rcu(in_dev, im) {  		if (im->multiaddr == mc_addr)  			break; @@ -2361,7 +2361,6 @@ int ip_check_mc(struct in_device *in_dev, __be32 mc_addr, __be32 src_addr, u16 p  		} else  			rv = 1; /* unspecified source; tentatively allow */  	} -	rcu_read_unlock();  	return rv;  } diff --git a/net/ipv4/route.c b/net/ipv4/route.c index ac32d8f3d68..f6730d94e30 100644 --- a/net/ipv4/route.c +++ b/net/ipv4/route.c @@ -2309,8 +2309,8 @@ skip_cache:  		struct in_device *in_dev = __in_dev_get_rcu(dev);  		if (in_dev) { -			int our = ip_check_mc(in_dev, daddr, saddr, -					      ip_hdr(skb)->protocol); +			int our = ip_check_mc_rcu(in_dev, daddr, saddr, +						  ip_hdr(skb)->protocol);  			if (our  #ifdef CONFIG_IP_MROUTE  				|| @@ -2368,8 +2368,8 @@ static struct rtable *__mkroute_output(const struct fib_result *res,  		fi = NULL;  	} else if (type == RTN_MULTICAST) {  		flags |= RTCF_MULTICAST | RTCF_LOCAL; -		if (!ip_check_mc(in_dev, oldflp->fl4_dst, oldflp->fl4_src, -				 oldflp->proto)) +		if (!ip_check_mc_rcu(in_dev, oldflp->fl4_dst, oldflp->fl4_src, +				     oldflp->proto))  			flags &= ~RTCF_LOCAL;  		/* If multicast route do not exist use  		 * default one, but do not gateway in this case.  |