When sending START_STOP commands to resume scsi_device, it may be interrupted by exception operations such as host reset or PCI FLR. Once the command of START_STOP is failed, the runtime_status of scsi device will be error and it is difficult for user to recover it. So try more retries to increase robustness as the process of command START_STOP. Signed-off-by: Yihang Li <liyihang9@xxxxxxxxxx> --- drivers/scsi/sd.c | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/drivers/scsi/sd.c b/drivers/scsi/sd.c index 5cd88a8eea73..29f30407d713 100644 --- a/drivers/scsi/sd.c +++ b/drivers/scsi/sd.c @@ -4088,9 +4088,20 @@ static int sd_start_stop_device(struct scsi_disk *sdkp, int start) { unsigned char cmd[6] = { START_STOP }; /* START_VALID */ struct scsi_sense_hdr sshdr; + struct scsi_failure failure_defs[] = { + { + .allowed = 3, + .result = SCMD_FAILURE_RESULT_ANY, + }, + {} + }; + struct scsi_failures failures = { + .failure_definitions = failure_defs, + }; const struct scsi_exec_args exec_args = { .sshdr = &sshdr, .req_flags = BLK_MQ_REQ_PM, + .failures = &failures, }; struct scsi_device *sdp = sdkp->device; int res; -- 2.33.0