Message ID | 20240813011747.3643577-1-liyihang9@huawei.com (mailing list archive) |
---|---|
State | Superseded |
Headers | show |
Series | [v3] scsi: sd: retry command SYNC CACHE if format in progress | expand |
On Tue, Aug 13, 2024 at 09:17:47AM +0800, Yihang Li wrote: > If formatting a suspended disk (such as formatting with different DIF > type), the disk will be resuming first, and then the format command will > submit to the disk through SG_IO ioctl. > > When the disk is processing the format command, the system does not submit > other commands to the disk. Therefore, the system attempts to suspend the > disk again and sends the SYNC CACHE command. However, 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. Error info like: > > [ 669.925325] sd 6:0:6:0: [sdg] Synchronizing SCSI cache > [ 670.202371] sd 6:0:6:0: [sdg] Synchronize Cache(10) failed: Result: hostbyte=0x00 driverbyte=DRIVER_OK > [ 670.216300] sd 6:0:6:0: [sdg] Sense Key : 0x2 [current] > [ 670.221860] sd 6:0:6:0: [sdg] ASC=0x4 ASCQ=0x4 > > To solve the issue, retry the command until format command is finished. > > Signed-off-by: Yihang Li <liyihang9@huawei.com> > Reviewed-by: Bart Van Assche <bvanassche@acm.org> > --- > 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 > > <formletter> This is not the correct way to submit patches for inclusion in the stable kernel tree. Please read: https://www.kernel.org/doc/html/latest/process/stable-kernel-rules.html for how to do this properly. </formletter>
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