devid_scsi_encode() flags 'LUN missing' page83 response as invalid
In some testing where LUNs were being added and removed, we saw the following error message was emitted:
[ID 517869 kern.warning] WARNING: Page83 data not standards compliant ........
Using a bit of dtrace to capture the Page83 VPD data:
15 19668 is_page83_data_valid:return len: 24 0 1 2 3 4 5 6 7 8 9 a b c d e f 0123456789abcdef 0: 7f 83 00 14 01 03 00 10 60 00 00 00 00 00 00 00 ........`....... 10: 00 00 00 00 00 00 00 00 bb fa ed fe 89 17 00 00 ................ 20: 20 0c cb f0 0b fe ff ff cd c4 db 51 0b fe ff ff ..........Q.... 30: ef be ad de ef be ad de ef be ad de ef be ad de ................
From SPC-5 6.7.1,
In response to an INQUIRY command received by an incorrect logical unit, the SCSI target device shall return the INQUIRY data with the peripheral qualifier set to the value defined in 6.7.2. The device server or task router (see SAM-5) shall terminate an INQUIRY command with CHECK CONDITION status only if the device server or task router is unable to return the requested INQUIRY data.
From Table 149 in section 6.7.2, we see that a value of 0b011 in the
PERIPHERAL QUALIFIER field (bits 5-7 of byte 0) is used to denote:
An addressed logical unit is not accessible to the task router (see SAM-5) contained in the SCSI target port that received this INQUIRY command.
If the task router sets the PERIPHERAL QUALIFIER field to 011b, the task router shall set the PERIPHERAL DEVICE TYPE field to 1Fh.
And we in fact see that
PERHIPHERAL DEVICE TYPE (bits 0-4 of byte 0) are 1F.
This is arguably a perfectly valid response.
devid_scsi_encode() should still fail to create a devid in this instance, but it shouldn't generate a warning about it.
No data to display