• Yaniv Gardi's avatar
    scsi: ufs: implement scsi host timeout handler · f550c65b
    Yaniv Gardi authored
    A race condition exists between request requeueing and scsi layer
    error handling:
    When UFS driver queuecommand returns a busy status for a request,
    it will be requeued and its tag will be freed and set to -1.
    At the same time it is possible that the request will timeout and
    scsi layer will start error handling for it. The scsi layer reuses
    the request and its tag to send error related commands to the device,
    however its tag is no longer valid.
    As this request was never really sent to the device, there is no
    point to start error handling with the device.
    Implement the scsi error handling timeout callback and bypass SCSI
    error handling for request that were not actually sent to the device.
    For such requests simply reset the block layer timer. Otherwise, let
    SCSI layer perform the usual error handling.
    Reviewed-by: default avatarHannes Reinecke <hare@suse.de>
    Signed-off-by: default avatarGilad Broner <gbroner@codeaurora.org>
    Signed-off-by: default avatarYaniv Gardi <ygardi@codeaurora.org>
    Signed-off-by: default avatarMartin K. Petersen <martin.petersen@oracle.com>
    f550c65b
ufshcd.c 155 KB