Skip to content

Commit

Permalink
[IPV6] lockdep: annotate __icmpv6_socket
Browse files Browse the repository at this point in the history
Split off __icmpv6_socket's sk->sk_dst_lock class, because it gets
used from softirqs, which is safe for __icmpv6_sockets (because they
never get directly used via userspace syscalls), but unsafe for normal
sockets.

Has no effect on non-lockdep kernels.

Signed-off-by: Ingo Molnar <[email protected]>
Acked-by: Herbert Xu <[email protected]>
Signed-off-by: Andrew Morton <[email protected]>
Signed-off-by: David S. Miller <[email protected]>
  • Loading branch information
Ingo Molnar authored and David S. Miller committed Aug 17, 2006
1 parent deb47c6 commit 640c41c
Showing 1 changed file with 13 additions and 0 deletions.
13 changes: 13 additions & 0 deletions net/ipv6/icmp.c
Original file line number Diff line number Diff line change
Expand Up @@ -712,6 +712,11 @@ static int icmpv6_rcv(struct sk_buff **pskb)
return 0;
}

/*
* Special lock-class for __icmpv6_socket:
*/
static struct lock_class_key icmpv6_socket_sk_dst_lock_key;

int __init icmpv6_init(struct net_proto_family *ops)
{
struct sock *sk;
Expand All @@ -730,6 +735,14 @@ int __init icmpv6_init(struct net_proto_family *ops)

sk = per_cpu(__icmpv6_socket, i)->sk;
sk->sk_allocation = GFP_ATOMIC;
/*
* Split off their lock-class, because sk->sk_dst_lock
* gets used from softirqs, which is safe for
* __icmpv6_socket (because those never get directly used
* via userspace syscalls), but unsafe for normal sockets.
*/
lockdep_set_class(&sk->sk_dst_lock,
&icmpv6_socket_sk_dst_lock_key);

/* Enough space for 2 64K ICMP packets, including
* sk_buff struct overhead.
Expand Down

0 comments on commit 640c41c

Please sign in to comment.