diff --git a/drivers/scsi/ufs/ufshcd.c b/drivers/scsi/ufs/ufshcd.c index 5f5fc918a375..43ed6416a917 100644 --- a/drivers/scsi/ufs/ufshcd.c +++ b/drivers/scsi/ufs/ufshcd.c @@ -6316,6 +6316,7 @@ static void ufshcd_rls_handler(struct work_struct *work) hba = container_of(work, struct ufs_hba, rls_work); pm_runtime_get_sync(hba->dev); ufshcd_scsi_block_requests(hba); + down_write(&hba->lock); ret = ufshcd_wait_for_doorbell_clr(hba, U64_MAX); if (ret) { dev_err(hba->dev, @@ -6349,6 +6350,7 @@ static void ufshcd_rls_handler(struct work_struct *work) hba->restore_needed = false; out: + up_write(&hba->lock); ufshcd_scsi_unblock_requests(hba); pm_runtime_put_sync(hba->dev); }