scsi: ufs: fix race between shutdown and rls handler
Call trace:-
__switch_to+0xb8/0xd0
__schedule+0x8d8/0xc70
schedule+0x74/0xa0
schedule_timeout+0x44/0x678
io_schedule_timeout+0x44/0x70
wait_for_common_io+0x90/0x118
wait_for_completion_io+0x14/0x28
blk_execute_rq+0x48/0x78
scsi_execute+0x114/0x1b8
ufshcd_set_dev_pwr_mode+0x1ac/0x248
ufshcd_suspend+0x208/0x548
ufshcd_shutdown+0x18c/0x1e8
ufshcd_pltfrm_shutdown+0x14/0x28
platform_drv_shutdown+0x20/0x30
device_shutdown+0x178/0x1f8
kernel_restart+0x54/0x128
SyS_reboot+0x158/0x228
__sys_trace_return+0x0/0x4
blk_execute_rq has acquired hba->lock and is waiting for host
to be unblocked.
Call trace:-
__switch_to+0xb8/0xd0
__schedule+0x8d8/0xc70
schedule+0x74/0xa0
rwsem_down_write_failed+0x24c/0x328
down_write+0x54/0x60
ufshcd_rls_handler+0x8c/0x380
process_one_work+0x228/0x4b0
worker_thread+0x2f4/0x460
kthread+0x114/0x128
ret_from_fork+0x10/0x20
rls handler has blocked the scsi requests and is waiting
for hba->lock.
Thus a deadlock happens.
Fix this by always acquiring the lock before blocking
scsi requests.
CRs-fixed: 2393722
Change-Id: Ib66682967641e316d70641a5189bdb71d9fdda7b
Signed-off-by:
Asutosh Das <asutoshd@codeaurora.org>
Loading
Please register or sign in to comment