diff options
| author | Paolo Bonzini <pbonzini@redhat.com> | 2012-05-16 12:54:03 +0200 |
|---|---|---|
| committer | Anthony Liguori <aliguori@us.ibm.com> | 2012-05-21 15:40:50 -0500 |
| commit | f34e73cd69bdbdb9b1d56b288c5e14d6fff58165 (patch) | |
| tree | 1214cf7f27ee9b25cfb49e1f0ae531a8c79385e9 /hw/virtio-net.c | |
| parent | 80a2ba3d3cf33b777d6a45776b0625b9a4283951 (diff) | |
| download | focaccia-qemu-f34e73cd69bdbdb9b1d56b288c5e14d6fff58165.tar.gz focaccia-qemu-f34e73cd69bdbdb9b1d56b288c5e14d6fff58165.zip | |
virtio-blk: report non-zero status when failing SG_IO requests
Linux really looks only at scsi->errors for SG_IO requests; it does not look at the virtio request status at all. Because of this, when a SG_IO request is failed early with virtio_blk_req_complete(req, VIRTIO_BLK_S_UNSUPP), without writing hdr.status, it will look like a success to the guest. This is their bug, but we can make it safe for older guests now by forcing scsi->errors to have a non-zero value whenever a request has to be failed. But if we fix the bug in the guest driver, we will have another problem because QEMU returns VIRTIO_BLK_S_IOERR if the status is non-zero, and Linux translates that to -EIO. Rather, the guest should succeed the request and pass the non-zero status via the userspace-provided SG_IO structure. So, remove the case where virtio_blk_handle_scsi can return VIRTIO_BLK_S_IOERR. Signed-off-by: Paolo Bonzini <pbonzini@redhat.com> Signed-off-by: Anthony Liguori <aliguori@us.ibm.com>
Diffstat (limited to 'hw/virtio-net.c')
0 files changed, 0 insertions, 0 deletions