SPC does not mandate to allow READ CAPACITY when in standby, but linux currently relies on a valid capacity. Otherwise requests will be retried from sd_prep_fn() and I/O will never complete.
Signed-off-by: Hannes Reinecke <h...@suse.de> --- hw/scsi/scsi-disk.c | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/hw/scsi/scsi-disk.c b/hw/scsi/scsi-disk.c index 59d09e4..b3ab890 100644 --- a/hw/scsi/scsi-disk.c +++ b/hw/scsi/scsi-disk.c @@ -2278,6 +2278,22 @@ static int32_t scsi_disk_emulate_command(SCSIRequest *req, uint8_t *buf) transition_allowed = false; unavailable_allowed = false; break; + case SERVICE_ACTION_IN_16: + /* + * READ CAPACITY is not required by SPC, + * but Linux (currently) relies on a + * valid capacity, otherwise requests will + * be retried from sd.c:sd_prep_dn() and + * optimized-standby failover won't work. + */ + if ((req->cmd.buf[1] & 0x31) != SAI_READ_CAPACITY_16) { + standby_allowed = false; + } + /* Fallthrough */ + case READ_CAPACITY_10: + transition_allowed = false; + unavailable_allowed = false; + break; default: transition_allowed = false; unavailable_allowed = false; -- 1.8.4.5