|
@@ -125,6 +125,7 @@ enum {
|
|
|
UFSHCD_STATE_RESET,
|
|
|
UFSHCD_STATE_ERROR,
|
|
|
UFSHCD_STATE_OPERATIONAL,
|
|
|
+ UFSHCD_STATE_EH_SCHEDULED,
|
|
|
};
|
|
|
|
|
|
/* UFSHCD error handling flags */
|
|
@@ -1450,6 +1451,7 @@ static int ufshcd_queuecommand(struct Scsi_Host *host, struct scsi_cmnd *cmd)
|
|
|
switch (hba->ufshcd_state) {
|
|
|
case UFSHCD_STATE_OPERATIONAL:
|
|
|
break;
|
|
|
+ case UFSHCD_STATE_EH_SCHEDULED:
|
|
|
case UFSHCD_STATE_RESET:
|
|
|
err = SCSI_MLQUEUE_HOST_BUSY;
|
|
|
goto out_unlock;
|
|
@@ -4212,7 +4214,7 @@ static void ufshcd_check_errors(struct ufs_hba *hba)
|
|
|
/* block commands from scsi mid-layer */
|
|
|
scsi_block_requests(hba->host);
|
|
|
|
|
|
- hba->ufshcd_state = UFSHCD_STATE_ERROR;
|
|
|
+ hba->ufshcd_state = UFSHCD_STATE_EH_SCHEDULED;
|
|
|
schedule_work(&hba->eh_work);
|
|
|
}
|
|
|
}
|