]> git.baikalelectronics.ru Git - kernel.git/commit
[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)
commit7d90b167b572a3cd83cb251f5bb285cba8108383
treeb51d9e55cc4777254fed5d6b2056cc26d5ccda9f
parente07c1a71b1e57234fdc5262900a76097a76d42d2
[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