• Paolo Abeni's avatar
    net/socket: use per af lockdep classes for sk queues · 581319c5
    Paolo Abeni authored
    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: default avatarCong Wang <xiyou.wangcong@gmail.com>
    Signed-off-by: default avatarPaolo Abeni <pabeni@redhat.com>
    Acked-by: default avatarEric Dumazet <edumazet@google.com>
    Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
    581319c5
sock.c 79.9 KB