[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PULL 12/29] scsi-disk: pass guest recoverable errors through even for r
From: |
Paolo Bonzini |
Subject: |
[PULL 12/29] scsi-disk: pass guest recoverable errors through even for rerror=stop |
Date: |
Fri, 26 Feb 2021 09:05:09 +0100 |
Right now, recoverable sense values are only passed directly to the
guest only for rerror=report. However, when rerror/werror are 'stop'
we still don't want the host to be involved on every UNIT ATTENTION
(especially considered that the QMP event will not have enough information
to act on the report).
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
---
hw/scsi/scsi-disk.c | 51 +++++++++++++++++++++++++--------------------
1 file changed, 28 insertions(+), 23 deletions(-)
diff --git a/hw/scsi/scsi-disk.c b/hw/scsi/scsi-disk.c
index 548a5297fa..a5a58d7db3 100644
--- a/hw/scsi/scsi-disk.c
+++ b/hw/scsi/scsi-disk.c
@@ -212,39 +212,44 @@ static bool scsi_handle_rw_error(SCSIDiskReq *r, int ret,
bool acct_failed)
}
}
- action = blk_get_error_action(s->qdev.conf.blk, is_read, error);
- if (action == BLOCK_ERROR_ACTION_REPORT) {
+ /*
+ * Check whether the error has to be handled by the guest or should
+ * rather follow the rerror=/werror= settings. Guest-handled errors
+ * are usually retried immediately, so do not post them to QMP and
+ * do not account them as failed I/O.
+ */
+ if (req_has_sense &&
+ scsi_sense_buf_is_guest_recoverable(r->req.sense,
sizeof(r->req.sense))) {
+ action = BLOCK_ERROR_ACTION_REPORT;
+ acct_failed = false;
+ } else {
+ action = blk_get_error_action(s->qdev.conf.blk, is_read, error);
+ blk_error_action(s->qdev.conf.blk, action, is_read, error);
+ }
+
+ switch (action) {
+ case BLOCK_ERROR_ACTION_REPORT:
if (acct_failed) {
block_acct_failed(blk_get_stats(s->qdev.conf.blk), &r->acct);
}
if (req_has_sense) {
- /* A passthrough command has run and has produced sense data; check
- * whether the error has to be handled by the guest or should
rather
- * pause the host.
- */
- if (scsi_sense_buf_is_guest_recoverable(r->req.sense,
sizeof(r->req.sense))) {
- /* These errors are handled by guest. */
- sdc->update_sense(&r->req);
- scsi_req_complete(&r->req, status);
- return true;
- }
- } else {
- if (status == CHECK_CONDITION) {
- scsi_req_build_sense(&r->req, sense);
- }
- scsi_req_complete(&r->req, status);
+ sdc->update_sense(&r->req);
+ } else if (status == CHECK_CONDITION) {
+ scsi_req_build_sense(&r->req, sense);
}
- }
+ scsi_req_complete(&r->req, status);
+ return true;
- blk_error_action(s->qdev.conf.blk, action, is_read, error);
- if (action == BLOCK_ERROR_ACTION_IGNORE) {
+ case BLOCK_ERROR_ACTION_IGNORE:
return false;
- }
- if (action == BLOCK_ERROR_ACTION_STOP) {
+ case BLOCK_ERROR_ACTION_STOP:
scsi_req_retry(&r->req);
+ return true;
+
+ default:
+ g_assert_not_reached();
}
- return true;
}
static bool scsi_disk_req_check_error(SCSIDiskReq *r, int ret, bool
acct_failed)
--
2.29.2
- [PULL 00/29] Misc patches for 2021-02-25, Paolo Bonzini, 2021/02/26
- [PULL 02/29] configure: fix --enable-fuzzing linker failures, Paolo Bonzini, 2021/02/26
- [PULL 05/29] scsi: add tracing for SG_IO commands, Paolo Bonzini, 2021/02/26
- [PULL 01/29] hvf: Sign the code after installation, Paolo Bonzini, 2021/02/26
- [PULL 03/29] multiprocess: move feature to meson_options.txt, Paolo Bonzini, 2021/02/26
- [PULL 06/29] scsi: allow user to set werror as report, Paolo Bonzini, 2021/02/26
- [PULL 10/29] scsi: introduce scsi_sense_from_errno(), Paolo Bonzini, 2021/02/26
- [PULL 13/29] scsi: drop 'result' argument from command_complete callback, Paolo Bonzini, 2021/02/26
- [PULL 18/29] qemu-options: update to show preferred boolean syntax for -netdev, Paolo Bonzini, 2021/02/26
- [PULL 12/29] scsi-disk: pass guest recoverable errors through even for rerror=stop,
Paolo Bonzini <=
- [PULL 16/29] qemu-options: update to show preferred boolean syntax for -chardev, Paolo Bonzini, 2021/02/26
- [PULL 17/29] qemu-options: update to show preferred boolean syntax for -spice, Paolo Bonzini, 2021/02/26
- [PULL 20/29] qemu-options: update to show preferred boolean syntax for -vnc, Paolo Bonzini, 2021/02/26
- [PULL 21/29] docs: update to show preferred boolean syntax for -chardev, Paolo Bonzini, 2021/02/26
- [PULL 23/29] docs: update to show preferred boolean syntax for -cpu, Paolo Bonzini, 2021/02/26
- [PULL 28/29] chardev: do not use short form boolean options in non-QemuOpts character device descriptions, Paolo Bonzini, 2021/02/26
- [PULL 26/29] target/i386: Add bus lock debug exception support, Paolo Bonzini, 2021/02/26
- [PULL 29/29] tcg/i386: rdpmc: fix the the condtions, Paolo Bonzini, 2021/02/26
- [PULL 04/29] scsi: make io_timeout configurable, Paolo Bonzini, 2021/02/26
- [PULL 08/29] scsi-disk: move scsi_handle_rw_error earlier, Paolo Bonzini, 2021/02/26