]> git.ipfire.org Git - thirdparty/qemu.git/commitdiff
scsi: Advertise limits by blocksize, not 512
authorEric Blake <eblake@redhat.com>
Thu, 23 Jun 2016 22:37:11 +0000 (16:37 -0600)
committerMichael Roth <mdroth@linux.vnet.ibm.com>
Fri, 5 Aug 2016 20:09:13 +0000 (15:09 -0500)
s->blocksize may be larger than 512, in which case our
tweaks to max_xfer_len and opt_xfer_len must be scaled
appropriately.

CC: qemu-stable@nongnu.org
Reported-by: Fam Zheng <famz@redhat.com>
Signed-off-by: Eric Blake <eblake@redhat.com>
Reviewed-by: Fam Zheng <famz@redhat.com>
Signed-off-by: Kevin Wolf <kwolf@redhat.com>
(cherry picked from commit efaf4781a995aacd22b1dd521b14e4644bafae14)
Signed-off-by: Michael Roth <mdroth@linux.vnet.ibm.com>
hw/scsi/scsi-generic.c

index 71372a8383a465cd0d14af4de82367df1e9efae3..c4ba9a4854f1dc403010325d89d1ce4cd4ca7cae 100644 (file)
@@ -225,7 +225,8 @@ static void scsi_read_complete(void * opaque, int ret)
     if (s->type == TYPE_DISK &&
         r->req.cmd.buf[0] == INQUIRY &&
         r->req.cmd.buf[2] == 0xb0) {
-        uint32_t max_xfer_len = blk_get_max_transfer_length(s->conf.blk);
+        uint32_t max_xfer_len = blk_get_max_transfer_length(s->conf.blk) /
+            (s->blocksize / BDRV_SECTOR_SIZE);
         if (max_xfer_len) {
             stl_be_p(&r->buf[8], max_xfer_len);
             /* Also take care of the opt xfer len. */