linux/drivers/scsi/cxlflash
Matthew R. Ochs 8e78262328 cxlflash: Fix to prevent EEH recovery failure
The process_sense() routine can perform a read capacity which
can take some time to complete. If an EEH occurs while waiting
on the read capacity, the EEH handler will wait to obtain the
context's mutex in order to put the context in an error state.
The EEH handler will sit and wait until the context is free,
but this wait can potentially last forever (deadlock) if the
scsi_execute() that performs the read capacity experiences a
timeout and calls into the reset callback. When that occurs,
the reset callback sees that the device is already being reset
and waits for the reset to complete. This leaves two threads
waiting on the other.

To address this issue, make the context unavailable to new,
non-system owned threads and release the context while calling
into process_sense(). After returning from process_sense() the
context mutex is reacquired and the context is made available
again. The context can be safely moved to the error state if
needed during the unavailable window as no other threads will
hold its reference.

Signed-off-by: Matthew R. Ochs <mrochs@linux.vnet.ibm.com>
Signed-off-by: Manoj N. Kumar <manoj@linux.vnet.ibm.com>
Reviewed-by: Brian King <brking@linux.vnet.ibm.com>
Reviewed-by: Daniel Axtens <dja@axtens.net>
Reviewed-by: Tomas Henzl <thenzl@redhat.com>
Signed-off-by: James Bottomley <JBottomley@Odin.com>
2015-10-30 17:17:56 +09:00
..
common.h cxlflash: Fix MMIO and endianness errors 2015-10-30 17:17:36 +09:00
Kconfig
lunmgt.c cxlflash: Fix to avoid invalid port_sel value 2015-10-30 16:57:21 +09:00
main.c cxlflash: Fix MMIO and endianness errors 2015-10-30 17:17:36 +09:00
main.h cxlflash: Fix host link up event handling 2015-10-30 17:12:22 +09:00
Makefile cxlflash: Virtual LUN support 2015-08-26 18:05:39 -07:00
sislite.h cxlflash: Fix AFU version access/storage and add check 2015-10-30 17:14:41 +09:00
superpipe.c cxlflash: Fix to prevent EEH recovery failure 2015-10-30 17:17:56 +09:00
superpipe.h cxlflash: Fix MMIO and endianness errors 2015-10-30 17:17:36 +09:00
vlun.c cxlflash: Fix MMIO and endianness errors 2015-10-30 17:17:36 +09:00
vlun.h cxlflash: Virtual LUN support 2015-08-26 18:05:39 -07:00