• Darrick J. Wong's avatar
    [SCSI] libsas: Reset timer on taskless scsi_cmnds in sas_scsi_timed_out · 6d4dcd4d
    Darrick J. Wong authored
    Every so often, a scsi_cmnd will time out, and the libsas timeout handler
    will discover that the scsi_cmnd does not have a sas_task attached to it.
    This can happen in two cases: (1) the scsi_cmnd actually made it through
    libsas to the HBA and is now going through scsi_done, or (2) the
    scsi_cmnd has been held up (host lock, slab alloc, etc) and libsas has
    not yet attached a sas_task.  In both cases, it is safe to ask SCSI for
    more time to process the command via EH_RESET_TIMER; we cannot blindly
    return EH_HANDLED because if (2) happens, we could end up calling
    scsi_done while another CPU is heading towards sas_queuecommand, which
    causes slab corruption when sas_task_done updates the freed scsi_cmnd.
    Signed-off-by: default avatarDarrick J. Wong <djwong@us.ibm.com>
    Signed-off-by: default avatarJames Bottomley <James.Bottomley@SteelEye.com>
    6d4dcd4d
sas_scsi_host.c 22.9 KB