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 /net/ipv4 | |
parent | 33175d84ee3fa29991adb80513683e010769e807 (diff) | |
download | linux-dbdd9a52e38a4a93adfa4d0278801cce4fad98eb.tar.bz2 |
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>
Diffstat (limited to 'net/ipv4')
-rw-r--r-- | net/ipv4/igmp.c | 5 | ||||
-rw-r--r-- | net/ipv4/route.c | 8 |
2 files changed, 6 insertions, 7 deletions
diff --git a/net/ipv4/igmp.c b/net/ipv4/igmp.c index 44ba9068b72f..12b65ccca8e9 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 ac32d8f3d68f..f6730d94e307 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. |