linux/drivers/scsi/cxlflash
Uma Krishnan 32a9ae415b scsi: cxlflash: Acquire semaphore before invoking ioctl services
When a superpipe process that makes use of virtual LUNs is terminated or
killed abruptly, there is a possibility that the cxlflash driver could hang
and deprive other operations on the adapter.

The release fop registered to be invoked on a context close, detaches every
LUN associated with the context. The underlying service to detach the LUN
assumes it has been called with the read semaphore held, and releases the
semaphore before any operation that could be time consuming.

When invoked without holding the read semaphore, an opportunity is created
for the semaphore's count to become negative when it is temporarily released
during one of these potential lengthy operations. This negative count
results in subsequent acquisition attempts taking forever, leading to the
hang.

To support the current design point of holding the semaphore on the ioctl()
paths, the release fop should acquire it before invoking any ioctl services.

Signed-off-by: Uma Krishnan <ukrishn@linux.vnet.ibm.com>
Acked-by: Matthew R. Ochs <mrochs@linux.vnet.ibm.com>
Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
2018-05-18 11:22:10 -04:00
..
backend.h scsi: cxlflash: Introduce object handle fop 2018-04-18 19:32:50 -04:00
common.h scsi: cxlflash: Handle spurious interrupts 2018-04-18 19:32:51 -04:00
cxl_hw.c scsi: cxlflash: Introduce object handle fop 2018-04-18 19:32:50 -04:00
Kconfig scsi: cxlflash: Introduce OCXL backend 2018-04-18 19:32:47 -04:00
lunmgt.c scsi: cxlflash: Remove port configuration assumptions 2017-04-13 22:55:41 -04:00
main.c scsi: cxlflash: Limit the debug logs in the IO path 2018-05-18 11:22:10 -04:00
main.h scsi: cxlflash: Enable OCXL operations 2018-04-18 19:32:50 -04:00
Makefile scsi: cxlflash: Introduce OCXL backend 2018-04-18 19:32:47 -04:00
ocxl_hw.c scsi: cxlflash: Support AFU reset 2018-04-18 19:32:50 -04:00
ocxl_hw.h scsi: cxlflash: Register for translation errors 2018-04-18 19:32:50 -04:00
sislite.h scsi: cxlflash: Update synchronous interrupt status bits 2018-04-18 19:32:50 -04:00
superpipe.c scsi: cxlflash: Acquire semaphore before invoking ioctl services 2018-05-18 11:22:10 -04:00
superpipe.h scsi: cxlflash: Remove embedded CXL work structures 2018-01-10 23:24:57 -05:00
vlun.c scsi: cxlflash: Use derived maximum write same length 2017-10-31 12:28:02 -04:00
vlun.h scsi: cxlflash: Fix warnings/errors 2017-04-13 22:55:41 -04:00