[PATCH] scsi: sd: retry command SYNC CACHE if format in progress
From: Yihang Li
Date: Wed Aug 07 2024 - 22:17:43 EST
If formatting a suspended disk (such as formatting with different DIF
type), the SYNC CACHE command will fail because the disk is in the
formatting process, which will cause the runtime_status of the disk to
error and it is difficult for user to recover it.
To solve the issue, retry the command until format command is finished.
Signed-off-by: Yihang Li <liyihang9@xxxxxxxxxx>
---
drivers/scsi/sd.c | 5 +++++
1 file changed, 5 insertions(+)
diff --git a/drivers/scsi/sd.c b/drivers/scsi/sd.c
index adeaa8ab9951..5cd88a8eea73 100644
--- a/drivers/scsi/sd.c
+++ b/drivers/scsi/sd.c
@@ -1823,6 +1823,11 @@ static int sd_sync_cache(struct scsi_disk *sdkp)
(sshdr.asc == 0x74 && sshdr.ascq == 0x71)) /* drive is password locked */
/* this is no error here */
return 0;
+
+ /* retry if format in progress */
+ if (sshdr.asc == 0x4 && sshdr.ascq == 0x4)
+ return -EBUSY;
+
/*
* This drive doesn't support sync and there's not much
* we can do because this is called during shutdown
--
2.33.0