Skip to contentSkip to conversation

scsi-disk: Block Device Characteristics emulation fix

PATCH Applied Daniel Henrique Barboza 3 participants 3 messages Jul 11, 2018 – Jul 12, 2018

lore
Share & tools
lore
#0 lore raw

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=0

To 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
index 32f3f96ff8..5ae7baa082 100644
@@ -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
Acked-by on v1 1/1
#1 lore raw
Quoted 28 lines · Daniel Henrique Barboza

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=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.

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
index 32f3f96ff8..5ae7baa082 100644
@@ -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 */
Applied
#2 lore raw

Am 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 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=0

To 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

Kevin kindly agreed to take this through the block tree, so

Thanks, applied to the block branch.

Kevin