• Bart Van Assche's avatar
    RDMA/iwcm: Fix a lock inversion issue · b66f31ef
    Bart Van Assche authored
    This patch fixes the lock inversion complaint:
    
    ============================================
    WARNING: possible recursive locking detected
    5.3.0-rc7-dbg+ #1 Not tainted
    --------------------------------------------
    kworker/u16:6/171 is trying to acquire lock:
    00000000035c6e6c (&id_priv->handler_mutex){+.+.}, at: rdma_destroy_id+0x78/0x4a0 [rdma_cm]
    
    but task is already holding lock:
    00000000bc7c307d (&id_priv->handler_mutex){+.+.}, at: iw_conn_req_handler+0x151/0x680 [rdma_cm]
    
    other info that might help us debug this:
     Possible unsafe locking scenario:
    
           CPU0
           ----
      lock(&id_priv->handler_mutex);
      lock(&id_priv->handler_mutex);
    
     *** DEADLOCK ***
    
     May be due to missing lock nesting notation
    
    3 locks held by kworker/u16:6/171:
     #0: 00000000e2eaa773 ((wq_completion)iw_cm_wq){+.+.}, at: process_one_work+0x472/0xac0
     #1: 000000001efd357b ((work_completion)(&work->work)#3){+.+.}, at: process_one_work+0x476/0xac0
     #2: 00000000bc7c307d (&id_priv->handler_mutex){+.+.}, at: iw_conn_req_handler+0x151/0x680 [rdma_cm]
    
    stack backtrace:
    CPU: 3 PID: 171 Comm: kworker/u16:6 Not tainted 5.3.0-rc7-dbg+ #1
    Hardware name: Bochs Bochs, BIOS Bochs 01/01/2011
    Workqueue: iw_cm_wq cm_work_handler [iw_cm]
    Call Trace:
     dump_stack+0x8a/0xd6
     __lock_acquire.cold+0xe1/0x24d
     lock_acquire+0x106/0x240
     __mutex_lock+0x12e/0xcb0
     mutex_lock_nested+0x1f/0x30
     rdma_destroy_id+0x78/0x4a0 [rdma_cm]
     iw_conn_req_handler+0x5c9/0x680 [rdma_cm]
     cm_work_handler+0xe62/0x1100 [iw_cm]
     process_one_work+0x56d/0xac0
     worker_thread+0x7a/0x5d0
     kthread+0x1bc/0x210
     ret_from_fork+0x24/0x30
    
    This is not a bug as there are actually two lock classes here.
    
    Link: https://lore.kernel.org/r/20190930231707.48259-3-bvanassche@acm.org
    Fixes: de910bd9 ("RDMA/cma: Simplify locking needed for serialization of callbacks")
    Signed-off-by: default avatarBart Van Assche <bvanassche@acm.org>
    Reviewed-by: default avatarJason Gunthorpe <jgg@mellanox.com>
    Signed-off-by: default avatarJason Gunthorpe <jgg@mellanox.com>
    b66f31ef
cma.c 123 KB