[NET]: Set a separate lockdep class for neighbour table's proxy_queue
authorPavel Emelianov <xemul@sw.ru>
Tue, 17 Apr 2007 19:45:31 +0000 (12:45 -0700)
committerDavid S. Miller <davem@sunset.davemloft.net>
Tue, 17 Apr 2007 20:13:31 +0000 (13:13 -0700)
commitc2ecba71717c4f60671175fd26083c35a4b9ad58
treeb51d9e55cc4777254fed5d6b2056cc26d5ccda9f
parent5e7d7fa57323dfb48fb09464cf4542daa7ce8a72
[NET]: Set a separate lockdep class for neighbour table's proxy_queue

Otherwise the following calltrace will lead to a wrong
lockdep warning:

  neigh_proxy_process()
    `- lock(neigh_table->proxy_queue.lock);
  arp_redo /* via tbl->proxy_redo */
  arp_process
  neigh_event_ns
  neigh_update
  skb_queue_purge
    `- lock(neighbor->arp_queue.lock);

This is not a deadlock actually, as neighbor table's proxy_queue
and the neighbor's arp_queue are different queues.

Lockdep thinks there is a deadlock as both queues are initialized
with skb_queue_head_init() and thus have a common class.

Signed-off-by: David S. Miller <davem@davemloft.net>
include/linux/skbuff.h
net/core/neighbour.c