summaryrefslogtreecommitdiffstats
path: root/scsi
diff options
context:
space:
mode:
authorPaolo Bonzini2019-07-02 10:01:03 +0200
committerPaolo Bonzini2019-07-15 11:20:42 +0200
commit396ce7b94eef57194740347a011b9bed355e39b2 (patch)
tree69b3c27f7c10fb16cb646b12f42f17604171f621 /scsi
parentscsi: explicitly list guest-recoverable sense codes (diff)
downloadqemu-396ce7b94eef57194740347a011b9bed355e39b2.tar.gz
qemu-396ce7b94eef57194740347a011b9bed355e39b2.tar.xz
qemu-396ce7b94eef57194740347a011b9bed355e39b2.zip
scsi: add guest-recoverable ZBC errors
When running basic operations on zoned storage from the guest via scsi-block, the following ASCs are reported for write or read commands due to unexpected zone status or write pointer status: 21h 04h: UNALIGNED WRITE COMMAND 21h 05h: WRITE BOUNDARY VIOLATION 21h 06h: ATTEMPT TO READ INVALID DATA 55h 0Eh: INSUFFICIENT ZONE RESOURCES Reporting these ASCs to the guest, the user applications can handle them to manage zone/write pointer status, or help the user application developers to understand the failure reason and fix bugs. Reported-by: Shinichiro Kawasaki <shinichiro.kawasaki@wdc.com> Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
Diffstat (limited to 'scsi')
-rw-r--r--scsi/utils.c5
1 files changed, 5 insertions, 0 deletions
diff --git a/scsi/utils.c b/scsi/utils.c
index ad243a982b..873d49c907 100644
--- a/scsi/utils.c
+++ b/scsi/utils.c
@@ -360,6 +360,11 @@ static bool scsi_sense_is_guest_recoverable(int key, int asc, int ascq)
case 0x2500: /* LOGICAL UNIT NOT SUPPORTED */
case 0x2600: /* INVALID FIELD IN PARAMETER LIST */
+ case 0x2104: /* UNALIGNED WRITE COMMAND */
+ case 0x2105: /* WRITE BOUNDARY VIOLATION */
+ case 0x2106: /* ATTEMPT TO READ INVALID DATA */
+ case 0x550e: /* INSUFFICIENT ZONE RESOURCES */
+
case 0x0401: /* NOT READY, IN PROGRESS OF BECOMING READY */
case 0x0402: /* NOT READY, INITIALIZING COMMAND REQUIRED */
return true;