Commit d230823a authored by Hannes Reinecke's avatar Hannes Reinecke Committed by Martin K. Petersen

scsi_lib: Decode T10 vendor IDs

Some arrays / HBAs will only present T10 vendor IDs, so we should be
decoding them, too.

[mkp: Fixed T10 spelling]
Suggested-by: default avatarPaul Mackerras <paulus@ozlabs.org>
Signed-off-by: default avatarHannes Reinecke <hare@suse.com>
Tested-by: default avatarPaul Mackerras <paulus@ozlabs.org>
Reviewed-by: default avatarBart Van Assche <bart.vanassche@sandisk.com>
Signed-off-by: default avatarMartin K. Petersen <martin.petersen@oracle.com>
parent fe8b9534
...@@ -3064,6 +3064,7 @@ int scsi_vpd_lun_id(struct scsi_device *sdev, char *id, size_t id_len) ...@@ -3064,6 +3064,7 @@ int scsi_vpd_lun_id(struct scsi_device *sdev, char *id, size_t id_len)
* - EUI-64 based 12-byte * - EUI-64 based 12-byte
* - NAA IEEE Registered * - NAA IEEE Registered
* - NAA IEEE Extended * - NAA IEEE Extended
* - T10 Vendor ID
* as longer descriptors reduce the likelyhood * as longer descriptors reduce the likelyhood
* of identification clashes. * of identification clashes.
*/ */
...@@ -3082,6 +3083,21 @@ int scsi_vpd_lun_id(struct scsi_device *sdev, char *id, size_t id_len) ...@@ -3082,6 +3083,21 @@ int scsi_vpd_lun_id(struct scsi_device *sdev, char *id, size_t id_len)
goto next_desig; goto next_desig;
switch (d[1] & 0xf) { switch (d[1] & 0xf) {
case 0x1:
/* T10 Vendor ID */
if (cur_id_size > d[3])
break;
/* Prefer anything */
if (cur_id_type > 0x01 && cur_id_type != 0xff)
break;
cur_id_size = d[3];
if (cur_id_size + 4 > id_len)
cur_id_size = id_len - 4;
cur_id_str = d + 4;
cur_id_type = d[1] & 0xf;
id_size = snprintf(id, id_len, "t10.%*pE",
cur_id_size, cur_id_str);
break;
case 0x2: case 0x2:
/* EUI-64 */ /* EUI-64 */
if (cur_id_size > d[3]) if (cur_id_size > d[3])
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment