At 2017-01-03 17:38:49, Paolo Bonzini <pbonz...@redhat.com> wrote: > > >On 03/01/2017 09:12, Zhang Qian wrote: >> yes, you are right. >> The scenarios of problem is >> a scsi-disk object receives VERIFY command with BYTCHK bit being zero, >> scsi_block_is_passthrough returns false and finally scsi-block uses >> scsi_disk_dma_command for >> VERIFY. So the mode is set to SCSI_XFER_NONE. >> In scsi_req_continue, scsi_read_data function is called. > >Uhm, is the fix simply > >diff --git a/hw/scsi/scsi-disk.c b/hw/scsi/scsi-disk.c >index bdd1e5f..c080888 100644 >--- a/hw/scsi/scsi-disk.c >+++ b/hw/scsi/scsi-disk.c >@@ -2701,7 +2701,7 @@ static bool scsi_block_is_passthrough(SCSIDiskState *s, >uint8_t *buf) > * for the number of logical blocks specified in the length > * field). For other modes, do not use scatter/gather operation. > */ >- if ((buf[1] & 6) != 2) { >+ if ((buf[1] & 6) == 2) { > return false; > } > break; > >then?
I verified your patch, it is ok. but why not use (buf[1] & 2) == 2 ? >Thanks, > >Paolo