[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PULL 04/45] block/scsi: correctly emulate the VPD block limits page
From: |
Paolo Bonzini |
Subject: |
[PULL 04/45] block/scsi: correctly emulate the VPD block limits page |
Date: |
Thu, 17 Jun 2021 11:30:53 +0200 |
From: Maxim Levitsky <mlevitsk@redhat.com>
When the device doesn't support the VPD block limits page, we emulate it even
for SCSI passthrough.
As a part of the emulation we need to add it to the 'Supported VPD Pages'
The code that does this adds it to the page, but it doesn't increase the length
of the data to be copied to the guest, thus the guest never sees the VPD block
limits page as supported.
Bump the transfer size by 1 in this case.
Signed-off-by: Maxim Levitsky <mlevitsk@redhat.com>
Reviewed-by: Max Reitz <mreitz@redhat.com>
Message-Id: <20201217165612.942849-6-mlevitsk@redhat.com>
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
---
hw/scsi/scsi-generic.c | 9 +++++++--
1 file changed, 7 insertions(+), 2 deletions(-)
diff --git a/hw/scsi/scsi-generic.c b/hw/scsi/scsi-generic.c
index 98c30c5d5c..40e039864f 100644
--- a/hw/scsi/scsi-generic.c
+++ b/hw/scsi/scsi-generic.c
@@ -147,7 +147,7 @@ static int execute_command(BlockBackend *blk,
return 0;
}
-static void scsi_handle_inquiry_reply(SCSIGenericReq *r, SCSIDevice *s)
+static int scsi_handle_inquiry_reply(SCSIGenericReq *r, SCSIDevice *s, int len)
{
uint8_t page, page_idx;
@@ -213,8 +213,13 @@ static void scsi_handle_inquiry_reply(SCSIGenericReq *r,
SCSIDevice *s)
r->buf[page_idx] = 0xb0;
}
stw_be_p(r->buf + 2, lduw_be_p(r->buf + 2) + 1);
+
+ if (len < r->buflen) {
+ len++;
+ }
}
}
+ return len;
}
static int scsi_generic_emulate_block_limits(SCSIGenericReq *r, SCSIDevice *s)
@@ -332,7 +337,7 @@ static void scsi_read_complete(void * opaque, int ret)
}
}
if (r->req.cmd.buf[0] == INQUIRY) {
- scsi_handle_inquiry_reply(r, s);
+ len = scsi_handle_inquiry_reply(r, s, len);
}
req_complete:
--
2.31.1
- [PULL 00/45] Memory, i386, compilation, bugfix changes for 2021-06-17, Paolo Bonzini, 2021/06/17
- [PULL 01/45] vnc: avoid deprecation warnings for SASL on OS X, Paolo Bonzini, 2021/06/17
- [PULL 02/45] vl: Fix an assert failure in error path, Paolo Bonzini, 2021/06/17
- [PULL 04/45] block/scsi: correctly emulate the VPD block limits page,
Paolo Bonzini <=
- [PULL 03/45] qemu-config: use qemu_opts_from_qdict, Paolo Bonzini, 2021/06/17
- [PULL 08/45] esp: allow non-DMA callback in esp_transfer_data() initial transfer, Paolo Bonzini, 2021/06/17
- [PULL 05/45] runstate: Initialize Error * to NULL, Paolo Bonzini, 2021/06/17
- [PULL 06/45] esp: only assert INTR_DC interrupt flag if selection fails, Paolo Bonzini, 2021/06/17
- [PULL 07/45] esp: only set ESP_RSEQ at the start of the select sequence, Paolo Bonzini, 2021/06/17
- [PULL 11/45] esp: revert 75ef849696 "esp: correctly fill bus id with requested lun", Paolo Bonzini, 2021/06/17
- [PULL 14/45] esp: store lun coming from the MESSAGE OUT phase, Paolo Bonzini, 2021/06/17
- [PULL 15/45] softmmu/physmem: Mark shared anonymous memory RAM_SHARED, Paolo Bonzini, 2021/06/17
- [PULL 16/45] softmmu/physmem: Fix ram_block_discard_range() to handle shared anonymous memory, Paolo Bonzini, 2021/06/17
- [PULL 18/45] util/mmap-alloc: Factor out calculation of the pagesize for the guard page, Paolo Bonzini, 2021/06/17