virtio-scsi: do not compare 32-bit QEMU tags against 64-bit virtio-scsi tags
commit4dd7c82cdbabe54386ef31939f865469a095c9c3
authorPaolo Bonzini <pbonzini@redhat.com>
Wed, 8 Aug 2012 14:26:16 +0000 (8 16:26 +0200)
committerPaolo Bonzini <pbonzini@redhat.com>
Thu, 9 Aug 2012 13:04:09 +0000 (9 15:04 +0200)
tree933ea17d58c8d7ab54c363b99345afc549f2f928
parent31459f463a32dc6c1818fa1aaa3d1f56c367b718
virtio-scsi: do not compare 32-bit QEMU tags against 64-bit virtio-scsi tags

This patch fixes a problem in handling task management functions
in virtio-scsi.  The cause of the problem is a mismatch between
the size of the tag in QEMU (32-bit) and virtio-scsi (64-bit).
Changing the QEMU size is hard because the migration format
uses 32 bits to store the tag; so just don't use the QEMU tag
(virtio-scsi only uses the tag for task management functions
anyway) and look up the full 64-bit tag in the hba_private field.

The reproducer is a bit obscure.  If you cause an I/O timeout
(for example with rerror=stop and doing 'cont' on the monitor
continuously without fixing the error), sooner or later the
guest will try to abort the command and reissue it.  At this
point, QEMU will report _two_ errors instead of one when you
hit 'c', because the first error has not been canceled correctly.

Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
hw/virtio-scsi.c