Brian King e8fe98f6ec scsi: ibmvfc: Fix invalid state machine BUG_ON()
[ Upstream commit 15cfef8623a449d40d16541687afd58e78033be3 ]

This fixes an issue hitting the BUG_ON() in ibmvfc_do_work(). When going
through a host action of IBMVFC_HOST_ACTION_RESET, we change the action to
IBMVFC_HOST_ACTION_TGT_DEL, then drop the host lock, and reset the CRQ,
which changes the host state to IBMVFC_NO_CRQ. If, prior to setting the
host state to IBMVFC_NO_CRQ, ibmvfc_init_host() is called, it can then end
up changing the host action to IBMVFC_HOST_ACTION_INIT.  If we then change
the host state to IBMVFC_NO_CRQ, we will then hit the BUG_ON().

Make a couple of changes to avoid this. Leave the host action to be
IBMVFC_HOST_ACTION_RESET or IBMVFC_HOST_ACTION_REENABLE until after we drop
the host lock and reset or reenable the CRQ. Also harden the host state
machine to ensure we cannot leave the reset / reenable state until we've
finished processing the reset or reenable.

Link: https://lore.kernel.org/r/20210413001009.902400-1-tyreld@linux.ibm.com
Fixes: 73ee5d867287 ("[SCSI] ibmvfc: Fix soft lockup on resume")
Signed-off-by: Brian King <brking@linux.vnet.ibm.com>
[tyreld: added fixes tag]
Signed-off-by: Tyrel Datwyler <tyreld@linux.ibm.com>
[mkp: fix comment checkpatch warnings]
Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
Signed-off-by: Sasha Levin <sashal@kernel.org>
2021-05-14 09:44:25 +02:00
..
2020-12-30 11:50:53 +01:00
2021-01-06 14:48:38 +01:00
2021-05-14 09:44:25 +02:00
2021-05-11 14:04:12 +02:00
2019-07-11 15:14:01 -07:00
2019-07-11 15:17:41 -07:00
2021-05-11 14:04:10 +02:00
2019-03-02 11:39:54 -08:00
2019-07-11 15:17:41 -07:00
2019-07-11 15:17:41 -07:00
2018-12-18 23:19:21 -05:00
2019-07-11 15:17:41 -07:00
2019-01-08 21:58:35 -05:00
2019-01-08 21:58:35 -05:00
2019-07-20 10:04:58 -07:00
2019-07-11 15:14:01 -07:00
2019-06-18 19:46:18 -04:00
2019-07-11 15:17:41 -07:00
2018-12-18 23:19:21 -05:00
2021-05-14 09:44:25 +02:00
2019-07-11 15:14:01 -07:00
2018-12-28 14:48:06 -08:00
2019-08-16 11:33:56 -07:00
2019-08-16 11:33:56 -07:00
2019-07-11 15:14:01 -07:00
2019-07-11 15:14:01 -07:00
2019-11-05 23:17:53 -05:00
2019-08-04 21:41:29 -06:00
2019-07-11 15:14:01 -07:00
2018-12-18 23:19:21 -05:00
2021-05-14 09:44:25 +02:00
2021-05-14 09:44:25 +02:00
2019-07-11 15:17:41 -07:00
2019-07-11 15:14:01 -07:00