net/socket: use per af lockdep classes for sk queues
authorPaolo Abeni <pabeni@redhat.com>
Thu, 9 Mar 2017 12:54:08 +0000 (13:54 +0100)
committerDavid S. Miller <davem@davemloft.net>
Fri, 10 Mar 2017 00:36:45 +0000 (16:36 -0800)
commit581319c58600b54612c417aff32ae9bbd79f4cdb
tree437c5bb087a3ed2058d3368c0ffb6dd46baaa152
parent65e0ace2c5cdd7aa898fea17d6e7bdc909394bf9
net/socket: use per af lockdep classes for sk queues

Currently the sock queue's spin locks get their lockdep
classes by the default init_spin_lock() initializer:
all socket families get - usually, see below - a single
class for rx, another specific class for tx, etc.
This can lead to false positive lockdep splat, as
reported by Andrey.
Moreover there are two separate initialization points
for the sock queues, one in sk_clone_lock() and one
in sock_init_data(), so that e.g. the rx queue lock
can get one of two possible, different classes, depending
on the socket being cloned or not.
This change tries to address the above, setting explicitly
a per address family lockdep class for each queue's
spinlock. Also, move the duplicated initialization code to a
single location.

v1 -> v2:
 - renamed the init helper

rfc -> v1:
 - no changes, tested with several different workload

Suggested-by: Cong Wang <xiyou.wangcong@gmail.com>
Signed-off-by: Paolo Abeni <pabeni@redhat.com>
Acked-by: Eric Dumazet <edumazet@google.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
net/core/sock.c