• Bart Van Assche's avatar
    scsi: RDMA/srp: Fix a sleep-in-invalid-context bug · fd561412
    Bart Van Assche authored
    The previous patch guarantees that srp_queuecommand() does not get
    invoked while reconnecting occurs. Hence remove the code from
    srp_queuecommand() that prevents command queueing while reconnecting.
    This patch avoids that the following can appear in the kernel log:
    
    BUG: sleeping function called from invalid context at kernel/locking/mutex.c:747
    in_atomic(): 1, irqs_disabled(): 0, pid: 5600, name: scsi_eh_9
    1 lock held by scsi_eh_9/5600:
     #0:  (rcu_read_lock){....}, at: [<00000000cbb798c7>] __blk_mq_run_hw_queue+0xf1/0x1e0
    Preemption disabled at:
    [<00000000139badf2>] __blk_mq_delay_run_hw_queue+0x78/0xf0
    CPU: 9 PID: 5600 Comm: scsi_eh_9 Tainted: G        W        4.15.0-rc4-dbg+ #1
    Hardware name: Dell Inc. PowerEdge R720/0VWT90, BIOS 2.5.4 01/22/2016
    Call Trace:
     dump_stack+0x67/0x99
     ___might_sleep+0x16a/0x250 [ib_srp]
     __mutex_lock+0x46/0x9d0
     srp_queuecommand+0x356/0x420 [ib_srp]
     scsi_dispatch_cmd+0xf6/0x3f0
     scsi_queue_rq+0x4a8/0x5f0
     blk_mq_dispatch_rq_list+0x73/0x440
     blk_mq_sched_dispatch_requests+0x109/0x1a0
     __blk_mq_run_hw_queue+0x131/0x1e0
     __blk_mq_delay_run_hw_queue+0x9a/0xf0
     blk_mq_run_hw_queue+0xc0/0x1e0
     blk_mq_start_hw_queues+0x2c/0x40
     scsi_run_queue+0x18e/0x2d0
     scsi_run_host_queues+0x22/0x40
     scsi_error_handler+0x18d/0x5f0
     kthread+0x11c/0x140
     ret_from_fork+0x24/0x30
    Reviewed-by: default avatarHannes Reinecke <hare@suse.com>
    Reviewed-by: default avatarChristoph Hellwig <hch@lst.de>
    Reviewed-by: default avatarLaurence Oberman <loberman@redhat.com>
    Cc: Jason Gunthorpe <jgg@mellanox.com>
    Cc: Leon Romanovsky <leonro@mellanox.com>
    Cc: Doug Ledford <dledford@redhat.com>
    Signed-off-by: default avatarBart Van Assche <bvanassche@acm.org>
    Signed-off-by: default avatarMartin K. Petersen <martin.petersen@oracle.com>
    fd561412
ib_srp.c 113 KB