• Christof Schmitt's avatar
    [SCSI] zfcp: Fix deadlock between zfcp ERP and SCSI · 5f852be9
    Christof Schmitt authored
    The SCSI stack requires low level drivers to register and
    unregister devices. For zfcp this leads to the situation where
    zfcp calls the SCSI stack, the SCSI tries to scan the new device
    and the scan SCSI command fails. This would require the zfcp erp,
    but the erp thread is already blocked in the register call.
    
    The fix is to make sure that the calls from the ERP thread to
    the SCSI stack do not block the ERP thread. In detail:
    1) Use a workqueue to avoid blocking of the scsi_scan_target calls.
    2) When removing a unit make sure that no scsi_scan_target call is
       pending.
    3) Replace scsi_flush_work with scsi_target_unblock. This avoids
       blocking and has the same result.
    Signed-off-by: default avatarChristof Schmitt <christof.schmitt@de.ibm.com>
    Signed-off-by: default avatarSwen Schillig <swen@vnet.ibm.com>
    Signed-off-by: default avatarJames Bottomley <James.Bottomley@SteelEye.com>
    5f852be9
zfcp_scsi.c 24.6 KB