scsi: ufs: Try harder to change the power mode

[ Upstream commit 579a4e9dbd ]

Instead of only retrying the START STOP UNIT command if a unit attention is
reported, repeat it if any SCSI error is reported by the device or if the
command timed out.

Signed-off-by: Bart Van Assche <bvanassche@acm.org>
Link: https://lore.kernel.org/r/20221018202958.1902564-8-bvanassche@acm.org
Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
Stable-dep-of: fe8637f770 ("scsi: ufs: core: Increase the START STOP UNIT timeout from one to ten seconds")
Signed-off-by: Sasha Levin <sashal@kernel.org>
This commit is contained in:
Bart Van Assche 2022-10-18 13:29:55 -07:00 committed by Greg Kroah-Hartman
parent 9fc3adc6d0
commit 6ab081571f
1 changed files with 5 additions and 3 deletions

View File

@ -8830,9 +8830,11 @@ static int ufshcd_set_dev_pwr_mode(struct ufs_hba *hba,
for (retries = 3; retries > 0; --retries) { for (retries = 3; retries > 0; --retries) {
ret = scsi_execute(sdp, cmd, DMA_NONE, NULL, 0, NULL, &sshdr, ret = scsi_execute(sdp, cmd, DMA_NONE, NULL, 0, NULL, &sshdr,
HZ, 0, 0, RQF_PM, NULL); HZ, 0, 0, RQF_PM, NULL);
if (!scsi_status_is_check_condition(ret) || /*
!scsi_sense_valid(&sshdr) || * scsi_execute() only returns a negative value if the request
sshdr.sense_key != UNIT_ATTENTION) * queue is dying.
*/
if (ret <= 0)
break; break;
} }
if (ret) { if (ret) {