From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:34121) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1a2KUT-0007l0-L9 for qemu-devel@nongnu.org; Fri, 27 Nov 2015 09:59:14 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1a2KUQ-0001ru-46 for qemu-devel@nongnu.org; Fri, 27 Nov 2015 09:59:13 -0500 Received: from mx2.suse.de ([195.135.220.15]:49016) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1a2KUP-0001rX-Sn for qemu-devel@nongnu.org; Fri, 27 Nov 2015 09:59:10 -0500 From: Hannes Reinecke Date: Fri, 27 Nov 2015 15:59:04 +0100 Message-Id: <1448636346-24641-7-git-send-email-hare@suse.de> In-Reply-To: <1448636346-24641-1-git-send-email-hare@suse.de> References: <1448636346-24641-1-git-send-email-hare@suse.de> Subject: [Qemu-devel] [PATCH 6/8] scsi-disk: Allow READ CAPACITY in standby List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: Paolo Bonzini Cc: Johannes Thumshirn , Stefan Hajnoczi , Hannes Reinecke , qemu-devel@nongnu.org, Alexander Graf 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 --- 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