linux/drivers/scsi/cxlflash
Vaibhav Jain bb61b843ff scsi: cxlflash: Prevent deadlock when adapter probe fails
Presently when an error is encountered during probe of the cxlflash
adapter, a deadlock is seen with cpu thread stuck inside
cxlflash_remove(). Below is the trace of the deadlock as logged by
khungtaskd:

cxlflash 0006:00:00.0: cxlflash_probe: init_afu failed rc=-16
INFO: task kworker/80:1:890 blocked for more than 120 seconds.
       Not tainted 5.0.0-rc4-capi2-kexec+ #2
"echo 0 > /proc/sys/kernel/hung_task_timeout_secs" disables this message.
kworker/80:1    D    0   890      2 0x00000808
Workqueue: events work_for_cpu_fn

Call Trace:
 0x4d72136320 (unreliable)
 __switch_to+0x2cc/0x460
 __schedule+0x2bc/0xac0
 schedule+0x40/0xb0
 cxlflash_remove+0xec/0x640 [cxlflash]
 cxlflash_probe+0x370/0x8f0 [cxlflash]
 local_pci_probe+0x6c/0x140
 work_for_cpu_fn+0x38/0x60
 process_one_work+0x260/0x530
 worker_thread+0x280/0x5d0
 kthread+0x1a8/0x1b0
 ret_from_kernel_thread+0x5c/0x80
INFO: task systemd-udevd:5160 blocked for more than 120 seconds.

The deadlock occurs as cxlflash_remove() is called from cxlflash_probe()
without setting 'cxlflash_cfg->state' to STATE_PROBED and the probe thread
starts to wait on 'cxlflash_cfg->reset_waitq'. Since the device was never
successfully probed the 'cxlflash_cfg->state' never changes from
STATE_PROBING hence the deadlock occurs.

We fix this deadlock by setting the variable 'cxlflash_cfg->state' to
STATE_PROBED in case an error occurs during cxlflash_probe() and just
before calling cxlflash_remove().

Cc: stable@vger.kernel.org
Fixes: c21e0bbfc485("cxlflash: Base support for IBM CXL Flash Adapter")
Signed-off-by: Vaibhav Jain <vaibhav@linux.ibm.com>
Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
2019-02-04 22:24:02 -05:00
..
backend.h scsi: cxlflash: Add include guards to backend.h 2018-05-18 11:22:10 -04:00
common.h scsi: cxlflash: Use local mutex for AFU serialization 2018-05-18 11:22:10 -04:00
cxl_hw.c scsi: cxlflash: Introduce object handle fop 2018-04-18 19:32:50 -04:00
Kconfig scsi: cxlflash: Isolate external module dependencies 2018-05-18 11:22:10 -04:00
lunmgt.c scsi: cxlflash: Isolate external module dependencies 2018-05-18 11:22:10 -04:00
main.c scsi: cxlflash: Prevent deadlock when adapter probe fails 2019-02-04 22:24:02 -05:00
main.h scsi: cxlflash: fix assignment of the backend operations 2018-07-10 22:29:54 -04:00
Makefile scsi: cxlflash: Isolate external module dependencies 2018-05-18 11:22:10 -04:00
ocxl_hw.c SCSI misc on 20180815 2018-08-15 22:06:26 -07: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 misc on 20180815 2018-08-15 22:06:26 -07:00
superpipe.h scsi: cxlflash: Remove embedded CXL work structures 2018-01-10 23:24:57 -05:00
vlun.c scsi: cxlflash: Drop unused sense buffers 2018-08-02 15:19:46 -06:00
vlun.h scsi: cxlflash: Fix warnings/errors 2017-04-13 22:55:41 -04:00