[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PULL 3/5] scsi-disk: convert more errno values back to SCSI statuses
From: |
Paolo Bonzini |
Subject: |
[PULL 3/5] scsi-disk: convert more errno values back to SCSI statuses |
Date: |
Mon, 16 Nov 2020 14:58:13 -0500 |
Linux has some OS-specific (and sometimes weird) mappings for various SCSI
statuses and sense codes. The most important is probably RESERVATION
CONFLICT. Add them so that they can be reported back to the guest
kernel.
Cc: Hannes Reinecke <hare@suse.de>
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
---
hw/scsi/scsi-disk.c | 19 +++++++++++++++++++
1 file changed, 19 insertions(+)
diff --git a/hw/scsi/scsi-disk.c b/hw/scsi/scsi-disk.c
index e859534eaf..90841ad791 100644
--- a/hw/scsi/scsi-disk.c
+++ b/hw/scsi/scsi-disk.c
@@ -461,6 +461,25 @@ static bool scsi_handle_rw_error(SCSIDiskReq *r, int
error, bool acct_failed)
}
error = scsi_sense_buf_to_errno(r->req.sense,
sizeof(r->req.sense));
break;
+#ifdef CONFIG_LINUX
+ /* These errno mapping are specific to Linux. For more
information:
+ * - scsi_decide_disposition in drivers/scsi/scsi_error.c
+ * - scsi_result_to_blk_status in drivers/scsi/scsi_lib.c
+ * - blk_errors[] in block/blk-core.c
+ */
+ case EBADE:
+ /* DID_NEXUS_FAILURE -> BLK_STS_NEXUS. */
+ scsi_req_complete(&r->req, RESERVATION_CONFLICT);
+ break;
+ case ENODATA:
+ /* DID_MEDIUM_ERROR -> BLK_STS_MEDIUM. */
+ scsi_check_condition(r, SENSE_CODE(READ_ERROR));
+ break;
+ case EREMOTEIO:
+ /* DID_TARGET_FAILURE -> BLK_STS_TARGET. */
+ scsi_req_complete(&r->req, HARDWARE_ERROR);
+ break;
+#endif
case ENOMEDIUM:
scsi_check_condition(r, SENSE_CODE(NO_MEDIUM));
break;
--
2.26.2
- [PULL 0/5] Misc fixes for QEMU 5.2, Paolo Bonzini, 2020/11/16
- [PULL 1/5] kvm/i386: Set proper nested state format for SVM, Paolo Bonzini, 2020/11/16
- [PULL 3/5] scsi-disk: convert more errno values back to SCSI statuses,
Paolo Bonzini <=
- [PULL 4/5] target/i386: avoid theoretical leak on MCE injection, Paolo Bonzini, 2020/11/16
- [PULL 2/5] util/vfio-helpers.c: Use ram_block_discard_disable() in qemu_vfio_open_pci(), Paolo Bonzini, 2020/11/16
- [PULL 5/5] memory: Skip dirty tracking for un-migratable memory regions, Paolo Bonzini, 2020/11/16
- Re: [PULL 0/5] Misc fixes for QEMU 5.2, Peter Maydell, 2020/11/17