scsi: fix scsi compliance issue for inquiry VPD NAA identifier
NAA locally assinged designator(3h) format was defined in SPC4, as SPDK claimed can only support SPC3, so we used NAA IEEE extended identifier format instead. Change-Id: Ia4c153263c6b89ae8160488deaf16fd0e5cac8dc Signed-off-by: Changpeng Liu <changpeng.liu@intel.com> Reviewed-on: https://review.gerrithub.io/361904 Tested-by: SPDK Automated Test System <sys_sgsw@intel.com> Reviewed-by: Jim Harris <james.r.harris@intel.com> Reviewed-by: Tomasz Zawadzki <tomasz.zawadzki@intel.com> Reviewed-by: Ben Walker <benjamin.walker@intel.com>
This commit is contained in:
parent
5b392ecdd1
commit
2e28ef9d02
@ -70,10 +70,10 @@ spdk_hex2bin(char ch)
|
||||
}
|
||||
|
||||
static void
|
||||
spdk_bdev_scsi_set_local_naa(const char *name, uint8_t *buf)
|
||||
spdk_bdev_scsi_set_naa_ieee_extended(const char *name, uint8_t *buf)
|
||||
{
|
||||
int i, value, count = 0;
|
||||
uint64_t naa, local_value;
|
||||
uint64_t local_value;
|
||||
|
||||
for (i = 0; (i < 16) && (name[i] != '\0'); i++) {
|
||||
value = spdk_hex2bin(name[i]);
|
||||
@ -83,10 +83,16 @@ spdk_bdev_scsi_set_local_naa(const char *name, uint8_t *buf)
|
||||
buf[count] = value;
|
||||
}
|
||||
}
|
||||
/* NAA locally assigned filed */
|
||||
naa = 0x3;
|
||||
|
||||
local_value = *(uint64_t *)buf;
|
||||
local_value = (naa << 60) | (local_value >> 4);
|
||||
/*
|
||||
* see spc3r23 7.6.3.6.2,
|
||||
* NAA IEEE Extended identifer format
|
||||
*/
|
||||
local_value &= 0x0fff000000ffffffull;
|
||||
/* NAA 02, and 00 03 47 for IEEE Intel */
|
||||
local_value |= 0x2000000347000000ull;
|
||||
|
||||
to_be64((void *)buf, local_value);
|
||||
}
|
||||
|
||||
@ -280,7 +286,7 @@ spdk_bdev_scsi_inquiry(struct spdk_bdev *bdev, struct spdk_scsi_task *task,
|
||||
desig->piv = 1;
|
||||
desig->reserved1 = 0;
|
||||
desig->len = 8;
|
||||
spdk_bdev_scsi_set_local_naa(name, desig->desig);
|
||||
spdk_bdev_scsi_set_naa_ieee_extended(name, desig->desig);
|
||||
len = sizeof(struct spdk_scsi_desig_desc) + 8;
|
||||
|
||||
buf += sizeof(struct spdk_scsi_desig_desc) + desig->len;
|
||||
|
Loading…
Reference in New Issue
Block a user