• Xiaotian Feng's avatar
    isdn: fix possible circular locking dependency · 2bd9af04
    Xiaotian Feng authored
    There's a circular locking dependency:
    
    ---> isdn_net_get_locked_lp
        --->lock &nd->queue_lock
        --->lock &nd->queue->xmit_lock
        .....................
        ---->unlock &nd->queue_lock
    
    ---> isdn_net_writebuf_skb (called with &nd->queue->xmit_lock locked)
        ---->isdn_net_inc_frame_cnt
             ---->isdn_net_device_busy
                  ----> lock &nd->queue_lock
    
    This will trigger lockdep warnings:
    
     =======================================================
     [ INFO: possible circular locking dependency detected ]
     2.6.32-rc4-testing #7
     -------------------------------------------------------
     ipppd/28379 is trying to acquire lock:
     (&netdev->queue_lock){......}, at: [<e62ad0fd>] isdn_net_device_busy+0x2c/0x74 [isdn]
    
     but task is already holding lock:
     (&netdev->local->xmit_lock){+.....}, at: [<e62aefc2>] isdn_net_write_super+0x3f/0x6e [isdn]
    
     which lock already depends on the new lock.
     .......
    
     We don't need to lock nd->queue->xmit_lock to protect single
    isdn_net_lp_busy(). This can fix above lockdep warnings.
    Reported-and-tested-by: default avatarTilman Schmidt <tilman@imap.cc>
    Signed-off-by: default avatarXiaotian Feng <xtfeng@gmail.com>
    Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
    2bd9af04
isdn_net.h 4.93 KB