scsi-disk: Block Device Characteristics emulation fix
PATCH 1/1 scsi-disk: Block Device Characteristics emulation fix
The current BDC VPD page (page 0xb1) is too short. This can be seen running sg_utils:
$ sg_vpd --page=bdc /dev/sda Block device characteristics VPD page (SBC): Block device characteristics VPD page length too short=8
By the SCSI spec, the expected size of the SBC page is 0x40. There is no telling how the guest will behave with a shorter message - it can ignore it, or worse, make (wrong) assumptions.
This patch fixes the emulation by setting the size to 0x40. This is the output of the previous sg_vpd command after applying it:
$ sg_vpd --page=bdc /dev/sda -v
inquiry cdb: 12 01 b1 00 fc 00
Block device characteristics VPD page (SBC):
[PQual=0 Peripheral device type: disk]
Medium rotation rate is not reported
Product type: Not specified
WABEREQ=0
WACEREQ=0
Nominal form factor not reported
FUAB=0
VBULS=0To improve readability, this patch also adds the VBULS value explictly and add comments on the existing fields we're setting.
--- hw/scsi/scsi-disk.c | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-)
hw/scsi/scsi-disk.c +4 -3
@@ -775,11 +775,12 @@ int scsi_disk_emulate_vpd_page(SCSIRequest *req, uint8_t *outbuf) }case 0xb1 :/* block device characteristics */ { - buflen =8 ; + buflen =0x40 ; outbuf[4 ] = (s->rotation_rate >>8 ) &0xff ; outbuf[5 ] = s->rotation_rate &0xff ; - outbuf[6 ] =0 ; - outbuf[7 ] =0 ; + outbuf[6 ] =0 ;/* PRODUCT TYPE */ + outbuf[7 ] =0 ;/* WABEREQ | WACEREQ | NOMINAL FORM FACTOR */ + outbuf[8 ] =0 ;/* VBULS */ break ; }case 0xb2 :/* thin provisioning */
Signature · 1 line
2.17.1
Quoted 28 lines · Daniel Henrique Barboza
The current BDC VPD page (page
0xb1) is too short. This can be seen runningsg_utils:$ sg_vpd --page=bdc /dev/sda Block device characteristics VPD page (SBC): Block device characteristics VPD page length too short=8By the SCSI spec, the expected size of the SBC page is
0x40. There is no telling how the guest will behave with a shorter message - it can ignore it, or worse, make (wrong) assumptions.This patch fixes the emulation by setting the size to
0x40. This is the output of the previoussg_vpdcommand after applying it:$ sg_vpd --page=bdc /dev/sda -v inquiry cdb: 12 01 b1 00 fc 00 Block device characteristics VPD page (SBC): [PQual=0 Peripheral device type: disk] Medium rotation rate is not reported Product type: Not specified WABEREQ=0 WACEREQ=0 Nominal form factor not reported FUAB=0 VBULS=0
Quoted 5 lines
To improve readability, this patch also adds the VBULS value explictly and add comments on the existing fields we're setting.
Signed-off-by Daniel Henrique Barboza <[email protected]>
Kevin kindly agreed to take this through the block tree, so
Thanks,
Paolo
Quoted 25 lines
--- hw/scsi/scsi-disk.c | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-)hw/scsi/scsi-disk.c +4
-3@@ -775,11 +775,12 @@ int scsi_disk_emulate_vpd_page(SCSIRequest *req, uint8_t *outbuf) }case 0xb1 :/* block device characteristics */ { - buflen =8 ; + buflen =0x40 ; outbuf[4 ] = (s->rotation_rate >>8 ) &0xff ; outbuf[5 ] = s->rotation_rate &0xff ; - outbuf[6 ] =0 ; - outbuf[7 ] =0 ; + outbuf[6 ] =0 ;/* PRODUCT TYPE */ + outbuf[7 ] =0 ;/* WABEREQ | WACEREQ | NOMINAL FORM FACTOR */ + outbuf[8 ] =0 ;/* VBULS */ break ; }case 0xb2 :/* thin provisioning */
Kevin Wolf
AppliedAm 12.07.2018 um 16:53 hat Paolo Bonzini geschrieben:
Quoted 33 lines · Daniel Henrique Barboza
Quoted 32 lines
The current BDC VPD page (page
0xb1) is too short. This can be seen runningsg_utils:$ sg_vpd --page=bdc /dev/sda Block device characteristics VPD page (SBC): Block device characteristics VPD page length too short=8By the SCSI spec, the expected size of the SBC page is
0x40. There is no telling how the guest will behave with a shorter message - it can ignore it, or worse, make (wrong) assumptions.This patch fixes the emulation by setting the size to
0x40. This is the output of the previoussg_vpdcommand after applying it:$ sg_vpd --page=bdc /dev/sda -v inquiry cdb: 12 01 b1 00 fc 00 Block device characteristics VPD page (SBC): [PQual=0 Peripheral device type: disk] Medium rotation rate is not reported Product type: Not specified WABEREQ=0 WACEREQ=0 Nominal form factor not reported FUAB=0 VBULS=0To improve readability, this patch also adds the VBULS value explictly and add comments on the existing fields we're setting.
Quoted 5 lines
Quoted 1 line
Signed-off-by Daniel Henrique Barboza <[email protected]>Kevin kindly agreed to take this through the block tree, so
Acked-by Paolo Bonzini <[email protected]>
Thanks, applied to the block branch.
Kevin