scsi: lpfc: Fix hardlockup in scsi_cmd_iocb_cmpl
authorJames Smart <jsmart2021@gmail.com>
Wed, 22 May 2019 00:49:01 +0000 (17:49 -0700)
committerMartin K. Petersen <martin.petersen@oracle.com>
Tue, 18 Jun 2019 23:46:21 +0000 (19:46 -0400)
commitb9e5a2d961dbedd7ee293d21f12d6b5d4d4fc35a
tree533ba4906e46fe5b4be08ba8a6283124c3d813da
parent6594d31bab02e4a1d02355ff2f16a87dfc11b34f
scsi: lpfc: Fix hardlockup in scsi_cmd_iocb_cmpl

There is a race condition with the abort handler declaring a waitq
item on it's stack, followed by a timeout in the abort handler that
has it give up on the abort return to its caller. When the io is
finally aborted and its completion handler called, it references
the waitq element that the abort_handler set up, which is no longer
valid resulting in a deadlock.

Fix by clearing the waitq reference, under lock, when the abort
handler timeout gives up. Have the completion handler validate the
waitq before referencing it.

Signed-off-by: Dick Kennedy <dick.kennedy@broadcom.com>
Signed-off-by: James Smart <jsmart2021@gmail.com>
Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
drivers/scsi/lpfc/lpfc_scsi.c