diff options
Diffstat (limited to 'net')
-rw-r--r-- | net/core/sock.c | 16 |
1 files changed, 16 insertions, 0 deletions
diff --git a/net/core/sock.c b/net/core/sock.c index 533b9317144b..0b4d5d25b23c 100644 --- a/net/core/sock.c +++ b/net/core/sock.c | |||
@@ -129,6 +129,18 @@ | |||
129 | #include <net/tcp.h> | 129 | #include <net/tcp.h> |
130 | #endif | 130 | #endif |
131 | 131 | ||
132 | /* | ||
133 | * Each address family might have different locking rules, so we have | ||
134 | * one slock key per address family: | ||
135 | */ | ||
136 | struct lock_class_key af_family_keys[AF_MAX]; | ||
137 | |||
138 | /* | ||
139 | * sk_callback_lock locking rules are per-address-family, | ||
140 | * so split the lock classes by using a per-AF key: | ||
141 | */ | ||
142 | static struct lock_class_key af_callback_keys[AF_MAX]; | ||
143 | |||
132 | /* Take into consideration the size of the struct sk_buff overhead in the | 144 | /* Take into consideration the size of the struct sk_buff overhead in the |
133 | * determination of these values, since that is non-constant across | 145 | * determination of these values, since that is non-constant across |
134 | * platforms. This makes socket queueing behavior and performance | 146 | * platforms. This makes socket queueing behavior and performance |
@@ -848,6 +860,8 @@ struct sock *sk_clone(const struct sock *sk, const gfp_t priority) | |||
848 | 860 | ||
849 | rwlock_init(&newsk->sk_dst_lock); | 861 | rwlock_init(&newsk->sk_dst_lock); |
850 | rwlock_init(&newsk->sk_callback_lock); | 862 | rwlock_init(&newsk->sk_callback_lock); |
863 | lockdep_set_class(&newsk->sk_callback_lock, | ||
864 | af_callback_keys + newsk->sk_family); | ||
851 | 865 | ||
852 | newsk->sk_dst_cache = NULL; | 866 | newsk->sk_dst_cache = NULL; |
853 | newsk->sk_wmem_queued = 0; | 867 | newsk->sk_wmem_queued = 0; |
@@ -1422,6 +1436,8 @@ void sock_init_data(struct socket *sock, struct sock *sk) | |||
1422 | 1436 | ||
1423 | rwlock_init(&sk->sk_dst_lock); | 1437 | rwlock_init(&sk->sk_dst_lock); |
1424 | rwlock_init(&sk->sk_callback_lock); | 1438 | rwlock_init(&sk->sk_callback_lock); |
1439 | lockdep_set_class(&sk->sk_callback_lock, | ||
1440 | af_callback_keys + sk->sk_family); | ||
1425 | 1441 | ||
1426 | sk->sk_state_change = sock_def_wakeup; | 1442 | sk->sk_state_change = sock_def_wakeup; |
1427 | sk->sk_data_ready = sock_def_readable; | 1443 | sk->sk_data_ready = sock_def_readable; |