• Xiang Chen's avatar
    scsi: hisi_sas: Fix a timeout race of driver internal and SMP IO · e27cced3
    Xiang Chen authored
    [ Upstream commit 47905957 ]
    
    For internal IO and SMP IO, there is a time-out timer for them. In the
    timer handler, it checks whether IO is done according to the flag
    task->task_state_lock.
    
    There is an issue which may cause system suspended: internal IO or SMP IO
    is sent, but at that time because of hardware exception (such as inject
    2Bit ECC error), so IO is not completed and also not timeout. But, at that
    time, the SAS controller reset occurs to recover system. It will release
    the resource and set the status of IO to be SAS_TASK_STATE_DONE, so when IO
    timeout, it will never complete the completion of IO and wait for ever.
    
    [  729.123632] Call trace:
    [  729.126791] [<ffff00000808655c>] __switch_to+0x94/0xa8
    [  729.133106] [<ffff000008d96e98>] __schedule+0x1e8/0x7fc
    [  729.138975] [<ffff000008d974e0>] schedule+0x34/0x8c
    [  729.144401] [<ffff000008d9b000>] schedule_timeout+0x1d8/0x3cc
    [  729.150690] [<ffff000008d98218>] wait_for_common+0xdc/0x1a0
    [  729.157101] [<ffff000008d98304>] wait_for_completion+0x28/0x34
    [  729.165973] [<ffff000000dcefb4>] hisi_sas_internal_task_abort+0x2a0/0x424 [hisi_sas_test_main]
    [  729.176447] [<ffff000000dd18f4>] hisi_sas_abort_task+0x244/0x2d8 [hisi_sas_test_main]
    [  729.185258] [<ffff000008971714>] sas_eh_handle_sas_errors+0x1c8/0x7b8
    [  729.192391] [<ffff000008972774>] sas_scsi_recover_host+0x130/0x398
    [  729.199237] [<ffff00000894d8a8>] scsi_error_handler+0x148/0x5c0
    [  729.206009] [<ffff0000080f4118>] kthread+0x10c/0x138
    [  729.211563] [<ffff0000080855dc>] ret_from_fork+0x10/0x18
    
    To solve the issue, callback function task_done of those IOs need to be
    called when on SAS controller reset.
    Signed-off-by: default avatarXiang Chen <chenxiang66@hisilicon.com>
    Signed-off-by: default avatarJohn Garry <john.garry@huawei.com>
    Signed-off-by: default avatarMartin K. Petersen <martin.petersen@oracle.com>
    Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
    e27cced3
hisi_sas_main.c 63.5 KB