VIRTIO_BLK_F_SCSI is supposed to mean whether the host can *parse* SCSI requests, not *execute* them. So it should always be enabled, and the scsi=on/off property tied to a separate configuration variable that is not guest visible.
With this change, Linux has problems understanding failed requests, so patch 1 works around the Linux bugs. Important: because we need to do this to fix a migration compatibility problem when QEMU might be invoked with an old machine type, we must do this unconditionally. This more or less assumes that no one ever invoked QEMU with scsi=off, as it breaks migration from new QEMU, scsi=off to old QEMU, also scsi=off. However new->old is not supported upstream. If any downstream cares about new->old migration, they can apply v1 of the patches instead of this. Paolo Bonzini (3): virtio-blk: report non-zero status when failing SG_IO requests virtio-blk: define VirtIOBlkConf virtio-blk: always enable VIRTIO_BLK_F_SCSI hw/s390-virtio-bus.c | 10 ++++-- hw/s390-virtio-bus.h | 4 +- hw/virtio-blk.c | 77 ++++++++++++++++++++++++------------------------- hw/virtio-blk.h | 14 +++++---- hw/virtio-pci.c | 11 ++++--- hw/virtio-pci.h | 4 +- hw/virtio.h | 4 +- 7 files changed, 64 insertions(+), 60 deletions(-) -- 1.7.7.6