scsi-block: Don't skip callback for sgio error status/driver_status
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 <kwolf@redhat.com> Acked-by: Paolo Bonzini <pbonzini@redhat.com> Message-ID: <20240731123207.27636-3-kwolf@redhat.com> Signed-off-by: Kevin Wolf <kwolf@redhat.com>
This commit is contained in:
parent
cfe0880835
commit
622a70161a
@ -2832,16 +2832,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);
|
||||
|
Loading…
x
Reference in New Issue
Block a user