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

Commit f2eda47d authored by Eric Dumazet's avatar Eric Dumazet Committed by David S. Miller
Browse files

ipv6: raw: rcu annotations



Remove sparse warnings, using a function typedef to be able to use __rcu
annotation on mh_filter pointer.

Signed-off-by: default avatarEric Dumazet <eric.dumazet@gmail.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent 6193d2be
Loading
Loading
Loading
Loading
+7 −7
Original line number Original line Diff line number Diff line
@@ -123,18 +123,18 @@ static __inline__ int icmpv6_filter(struct sock *sk, struct sk_buff *skb)
}
}


#if defined(CONFIG_IPV6_MIP6) || defined(CONFIG_IPV6_MIP6_MODULE)
#if defined(CONFIG_IPV6_MIP6) || defined(CONFIG_IPV6_MIP6_MODULE)
static int (*mh_filter)(struct sock *sock, struct sk_buff *skb);
typedef int mh_filter_t(struct sock *sock, struct sk_buff *skb);


int rawv6_mh_filter_register(int (*filter)(struct sock *sock,
static mh_filter_t __rcu *mh_filter __read_mostly;
					   struct sk_buff *skb))

int rawv6_mh_filter_register(mh_filter_t filter)
{
{
	rcu_assign_pointer(mh_filter, filter);
	rcu_assign_pointer(mh_filter, filter);
	return 0;
	return 0;
}
}
EXPORT_SYMBOL(rawv6_mh_filter_register);
EXPORT_SYMBOL(rawv6_mh_filter_register);


int rawv6_mh_filter_unregister(int (*filter)(struct sock *sock,
int rawv6_mh_filter_unregister(mh_filter_t filter)
					     struct sk_buff *skb))
{
{
	rcu_assign_pointer(mh_filter, NULL);
	rcu_assign_pointer(mh_filter, NULL);
	synchronize_rcu();
	synchronize_rcu();
@@ -192,10 +192,10 @@ static int ipv6_raw_deliver(struct sk_buff *skb, int nexthdr)
			 * policy is placed in rawv6_rcv() because it is
			 * policy is placed in rawv6_rcv() because it is
			 * required for each socket.
			 * required for each socket.
			 */
			 */
			int (*filter)(struct sock *sock, struct sk_buff *skb);
			mh_filter_t *filter;


			filter = rcu_dereference(mh_filter);
			filter = rcu_dereference(mh_filter);
			filtered = filter ? filter(sk, skb) : 0;
			filtered = filter ? (*filter)(sk, skb) : 0;
			break;
			break;
		}
		}
#endif
#endif