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: Eric Dumazet <eric.dumazet@gmail.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
6193d2be29
commit
f2eda47df4
@ -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
|
||||||
|
Loading…
x
Reference in New Issue
Block a user