On 05/12/2014 14:00, Ming Lei wrote: > Since QEMU claims to support UNMAP, WRITE SAME and WRITE SAME 16 > in the LBP VPD page, it is better to provide "max write same length" > in response for block limits VPD page because: > > - T10 SBC-3 doesn't describe priority explicitly when all three > are enabled > - host driver may prefer WRITE/WRITE 16, then try to parse > "max write same length" > > Signed-off-by: Ming Lei <ming....@canonical.com> > --- > hw/scsi/scsi-disk.c | 14 ++++++++++++++ > 1 file changed, 14 insertions(+) > > diff --git a/hw/scsi/scsi-disk.c b/hw/scsi/scsi-disk.c > index 2f75d7d..b15bf4f 100644 > --- a/hw/scsi/scsi-disk.c > +++ b/hw/scsi/scsi-disk.c > @@ -674,6 +674,20 @@ static int scsi_disk_emulate_inquiry(SCSIRequest *req, > uint8_t *outbuf) > outbuf[29] = (unmap_sectors >> 16) & 0xff; > outbuf[30] = (unmap_sectors >> 8) & 0xff; > outbuf[31] = unmap_sectors & 0xff; > + > + /* > + * maximum write same length, just borrow max unmap > + * count because write same command need to support > + * unmap > + */ > + outbuf[36] = 0; > + outbuf[37] = 0; > + outbuf[38] = 0; > + outbuf[39] = 0; > + outbuf[40] = (max_unmap_sectors >> 24) & 0xff; > + outbuf[41] = (max_unmap_sectors >> 16) & 0xff; > + outbuf[42] = (max_unmap_sectors >> 8) & 0xff; > + outbuf[43] = max_unmap_sectors & 0xff; > break; > } > case 0xb2: /* thin provisioning */ >
There is support for splitting write_zeroes requests in the block layer, so this is a problem elsewhere in the stack. It could be in QEMU block/ or in Linux. Let's analyze it in the linux-scsi thread. Paolo