• Bart Van Assche's avatar
    scsi: klist: Make it safe to use klists in atomic context · 624fa779
    Bart Van Assche authored
    In the scsi_transport_srp implementation it cannot be avoided to
    iterate over a klist from atomic context when using the legacy block
    layer instead of blk-mq. Hence this patch that makes it safe to use
    klists in atomic context. This patch avoids that lockdep reports the
    following:
    
    WARNING: SOFTIRQ-safe -> SOFTIRQ-unsafe lock order detected
     Possible interrupt unsafe locking scenario:
    
           CPU0                    CPU1
           ----                    ----
      lock(&(&k->k_lock)->rlock);
                                   local_irq_disable();
                                   lock(&(&q->__queue_lock)->rlock);
                                   lock(&(&k->k_lock)->rlock);
      <Interrupt>
        lock(&(&q->__queue_lock)->rlock);
    
    stack backtrace:
    Workqueue: kblockd blk_timeout_work
    Call Trace:
     dump_stack+0xa4/0xf5
     check_usage+0x6e6/0x700
     __lock_acquire+0x185d/0x1b50
     lock_acquire+0xd2/0x260
     _raw_spin_lock+0x32/0x50
     klist_next+0x47/0x190
     device_for_each_child+0x8e/0x100
     srp_timed_out+0xaf/0x1d0 [scsi_transport_srp]
     scsi_times_out+0xd4/0x410 [scsi_mod]
     blk_rq_timed_out+0x36/0x70
     blk_timeout_work+0x1b5/0x220
     process_one_work+0x4fe/0xad0
     worker_thread+0x63/0x5a0
     kthread+0x1c1/0x1e0
     ret_from_fork+0x24/0x30
    
    See also commit c9ddf734 ("scsi: scsi_transport_srp: Fix shost to
    rport translation").
    Signed-off-by: 's avatarBart Van Assche <bart.vanassche@wdc.com>
    Cc: Martin K. Petersen <martin.petersen@oracle.com>
    Cc: James Bottomley <jejb@linux.vnet.ibm.com>
    Acked-by: 's avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
    Signed-off-by: Martin K. Petersen's avatarMartin K. Petersen <martin.petersen@oracle.com>
    624fa779
klist.c 10.4 KB