Commit 2e28ef9d authored by Changpeng Liu's avatar Changpeng Liu Committed by Daniel Verkamp
Browse files

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: default avatarChangpeng Liu <changpeng.liu@intel.com>
Reviewed-on: https://review.gerrithub.io/361904


Tested-by: default avatarSPDK Automated Test System <sys_sgsw@intel.com>
Reviewed-by: default avatarJim Harris <james.r.harris@intel.com>
Reviewed-by: default avatarTomasz Zawadzki <tomasz.zawadzki@intel.com>
Reviewed-by: default avatarBen Walker <benjamin.walker@intel.com>
parent 5b392ecd
Loading
Loading
Loading
Loading
+12 −6
Original line number Diff line number Diff line
@@ -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;