From d580b83d9eda7802ffa3890ea8641793fe78937c Mon Sep 17 00:00:00 2001 From: Kevin Wolf Date: Wed, 31 Jul 2024 14:32:05 +0200 Subject: [PATCH 094/100] scsi-block: Don't skip callback for sgio error status/driver_status RH-Author: Kevin Wolf RH-MergeRequest: 261: scsi-block: Fix error handling with r/werror=stop RH-Jira: RHEL-50000 RH-Acked-by: Hanna Czenczek RH-Acked-by: Stefan Hajnoczi RH-Commit: [2/4] 1fee1b21dae314f4f34c88f2d2fabd7af011404a (kmwolf/centos-qemu-kvm) Instead of calling into scsi_handle_rw_error() directly from scsi_block_sgio_complete() and skipping the normal callback, go through the normal cleanup path by calling the callback with a positive error value. The important difference here is not only that the code path is cleaner, but that the callbacks set r->req.aiocb = NULL. If we skip setting this and the error action is BLOCK_ERROR_ACTION_STOP, resuming the VM runs into an assertion failure in scsi_read_data() or scsi_write_data() because the dangling aiocb pointer is unexpected. Fixes: a108557bbf ("scsi: inline sg_io_sense_from_errno() into the callers.") Buglink: https://issues.redhat.com/browse/RHEL-50000 Signed-off-by: Kevin Wolf Acked-by: Paolo Bonzini Message-ID: <20240731123207.27636-3-kwolf@redhat.com> Signed-off-by: Kevin Wolf (cherry picked from commit 622a70161ac258e4a166a7dca4b5be267e0652d9) Signed-off-by: Kevin Wolf --- hw/scsi/scsi-disk.c | 10 ---------- 1 file changed, 10 deletions(-) diff --git a/hw/scsi/scsi-disk.c b/hw/scsi/scsi-disk.c index bed2c8746c..e7f57f3230 100644 --- a/hw/scsi/scsi-disk.c +++ b/hw/scsi/scsi-disk.c @@ -2804,16 +2804,6 @@ static void scsi_block_sgio_complete(void *opaque, int ret) } else { ret = io_hdr->status; } - - if (ret > 0) { - if (scsi_handle_rw_error(r, ret, true)) { - scsi_req_unref(&r->req); - return; - } - - /* Ignore error. */ - ret = 0; - } } req->cb(req->cb_opaque, ret); -- 2.39.3