diff options
author | John W. Linville <linville@tuxdriver.com> | 2006-08-22 14:42:36 -0400 |
---|---|---|
committer | John W. Linville <linville@tuxdriver.com> | 2006-08-22 14:42:36 -0400 |
commit | 69758820a42da207bdc775d6eccf1f9fb67cd62e (patch) | |
tree | 4c4dd2b596aa5535231656bf0fa1bc65a8b17471 /net/ipv6/icmp.c | |
parent | 113b898e38cb20e80847c24154ce62273b948c6a (diff) | |
parent | ef7d1b244fa6c94fb76d5f787b8629df64ea4046 (diff) | |
download | linux-69758820a42da207bdc775d6eccf1f9fb67cd62e.tar.gz |
Merge branch 'from-linus' into upstream
Diffstat (limited to 'net/ipv6/icmp.c')
-rw-r--r-- | net/ipv6/icmp.c | 13 |
1 files changed, 13 insertions, 0 deletions
diff --git a/net/ipv6/icmp.c b/net/ipv6/icmp.c index 1044b6fce0d5..3d6e9a351150 100644 --- a/net/ipv6/icmp.c +++ b/net/ipv6/icmp.c @@ -712,6 +712,11 @@ discard_it: 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; @@ -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. |