scsi: lpfc: Fix possible ABBA deadlock in nvmet_xri_aborted()
authorJames Smart <jsmart2021@gmail.com>
Fri, 30 Jul 2021 16:33:09 +0000 (09:33 -0700)
committerMartin K. Petersen <martin.petersen@oracle.com>
Sat, 31 Jul 2021 03:47:19 +0000 (23:47 -0400)
commit7740b615b6665e47f162e261d805f1bbbac15876
treeb1eccdb9e2f41dfcf713ef1c505106e48c01bd93
parent0f783c2d640ac03ad3bb3ba6b7a1287ddf18031d
scsi: lpfc: Fix possible ABBA deadlock in nvmet_xri_aborted()

The lpfc_sli4_nvmet_xri_aborted() routine takes out the abts_buf_list_lock
and traverses the buffer contexts to match the xri. Upon match, it then
takes the context lock before potentially removing the context from the
associated buffer list. This violates the lock hierarchy used elsewhere in
the driver of locking context, then the abts_buf_list_lock - thus a
possible deadlock.

Resolve by: after matching, release the abts_buf_list_lock, then take the
context lock, and if to be deleted from the list, retake the
abts_buf_list_lock, maintaining lock hierarchy. This matches same list lock
hierarchy as elsewhere in the driver

Link: https://lore.kernel.org/r/20210730163309.25809-1-jsmart2021@gmail.com
Reported-by: Jia-Ju Bai <baijiaju1990@gmail.com>
Signed-off-by: James Smart <jsmart2021@gmail.com>
Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
drivers/scsi/lpfc/lpfc_nvmet.c