• Bart Van Assche's avatar
    scsi: mpt3sas: Avoid sleeping in interrupt context · 8893cf6c
    Bart Van Assche authored
    Commit 669f0441 ("scsi: srp_transport: Move queuecommand() wait code
    to SCSI core") can make scsi_internal_device_block() sleep.  However,
    the mpt3sas driver can call this function from an interrupt
    handler. Hence add a second argument to scsi_internal_device_block()
    that restores the old behavior of this function for the mpt3sas handler.
    
    The call chain that triggered an "IRQ handler enabled interrupts"
    complaint is as follows:
    
    _base_interrupt()
    -> _base_async_event()
       -> mpt3sas_scsih_event_callback()
          -> _scsih_check_topo_delete_events()
             -> _scsih_block_io_to_children_attached_directly()
                -> _scsih_block_io_device()
                   -> _scsih_internal_device_block()
                      -> scsi_internal_device_block()
    Reported-by: default avatarOmar Sandoval <osandov@osandov.com>
    Signed-off-by: default avatarBart Van Assche <bart.vanassche@sandisk.com>
    Cc: Omar Sandoval <osandov@osandov.com>
    Cc: Hannes Reinecke <hare@suse.com>
    Cc: Sagi Grimberg <sagi@grimberg.me>
    Cc: Christoph Hellwig <hch@lst.de>
    Cc: Sathya Prakash <sathya.prakash@broadcom.com>
    Cc: Chaitra P B <chaitra.basappa@broadcom.com>
    Cc: Suganath Prabu Subramani <suganath-prabu.subramani@broadcom.com>
    Cc: Sreekanth Reddy <Sreekanth.Reddy@broadcom.com>
    Cc: <stable@vger.kernel.org> # v4.10+
    Tested-by: default avatarOmar Sandoval <osandov@fb.com>
    Signed-off-by: default avatarMartin K. Petersen <martin.petersen@oracle.com>
    8893cf6c
mpt3sas_scsih.c 267 KB