Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit dbdd9a52 authored by David S. Miller's avatar David S. Miller
Browse files

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: default avatarDavid S. Miller <davem@davemloft.net>
parent 33175d84
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -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);
+2 −3
Original line number Diff line number Diff line
@@ -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;
}

+4 −4
Original line number Diff line number Diff line
@@ -2309,7 +2309,7 @@ int ip_route_input_common(struct sk_buff *skb, __be32 daddr, __be32 saddr,
		struct in_device *in_dev = __in_dev_get_rcu(dev);

		if (in_dev) {
			int our = ip_check_mc(in_dev, daddr, saddr,
			int our = ip_check_mc_rcu(in_dev, daddr, saddr,
						  ip_hdr(skb)->protocol);
			if (our
#ifdef CONFIG_IP_MROUTE
@@ -2368,7 +2368,7 @@ 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,
		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