Skip to content

Commit

Permalink
scsi: mpt3sas: Fix deadlock while cancelling the running firmware event
Browse files Browse the repository at this point in the history
[ Upstream commit e2fac6c ]

Do not cancel current running firmware event work if the event type is
different from MPT3SAS_REMOVE_UNRESPONDING_DEVICES.  Otherwise a deadlock
can be observed while cancelling the current firmware event work if a hard
reset operation is called as part of processing the current event.

Link: https://lore.kernel.org/r/20210518051625.1596742-2-suganath-prabu.subramani@broadcom.com
Signed-off-by: Suganath Prabu S <suganath-prabu.subramani@broadcom.com>
Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
Signed-off-by: Sasha Levin <sashal@kernel.org>
  • Loading branch information
suganathprabu0512 authored and gregkh committed Jul 20, 2021
1 parent b2ef1f5 commit fc6bf99
Showing 1 changed file with 22 additions and 0 deletions.
22 changes: 22 additions & 0 deletions drivers/scsi/mpt3sas/mpt3sas_scsih.c
Expand Up @@ -3697,6 +3697,28 @@ _scsih_fw_event_cleanup_queue(struct MPT3SAS_ADAPTER *ioc)
ioc->fw_events_cleanup = 1;
while ((fw_event = dequeue_next_fw_event(ioc)) ||
(fw_event = ioc->current_event)) {

/*
* Don't call cancel_work_sync() for current_event
* other than MPT3SAS_REMOVE_UNRESPONDING_DEVICES;
* otherwise we may observe deadlock if current
* hard reset issued as part of processing the current_event.
*
* Orginal logic of cleaning the current_event is added
* for handling the back to back host reset issued by the user.
* i.e. during back to back host reset, driver use to process
* the two instances of MPT3SAS_REMOVE_UNRESPONDING_DEVICES
* event back to back and this made the drives to unregister
* the devices from SML.
*/

if (fw_event == ioc->current_event &&
ioc->current_event->event !=
MPT3SAS_REMOVE_UNRESPONDING_DEVICES) {
ioc->current_event = NULL;
continue;
}

/*
* Wait on the fw_event to complete. If this returns 1, then
* the event was never executed, and we need a put for the
Expand Down

0 comments on commit fc6bf99

Please sign in to comment.