aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/scsi
diff options
context:
space:
mode:
authorDouglas Gilbert <dgilbert@interlog.com>2016-05-06 00:40:29 -0400
committerMartin K. Petersen <martin.petersen@oracle.com>2016-05-10 21:26:14 -0400
commit1b37bd606deef0a787bdbbab6ff51dbebdeb9d3d (patch)
treeeda18c9e8c36cc9e610f282623dc31ce542c8ce4 /drivers/scsi
parent09ba24c18c7e0c215c39b3d92332b64132dae170 (diff)
scsi_debug: use locally assigned naa
For reported SAS addresses replace fake IEEE registered NAAs (5) with locally assigned NAAs (3). Signed-off-by: Douglas Gilbert <dgilbert@interlog.com> Reviewed-by: Hannes Reinecke <hare@suse.com> Reviewed-by: Bart Van Assche <bart.vanassche@sandisk.com> Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
Diffstat (limited to 'drivers/scsi')
-rw-r--r--drivers/scsi/scsi_debug.c35
1 files changed, 18 insertions, 17 deletions
diff --git a/drivers/scsi/scsi_debug.c b/drivers/scsi/scsi_debug.c
index efb454906fc7..0f9ba41e27d8 100644
--- a/drivers/scsi/scsi_debug.c
+++ b/drivers/scsi/scsi_debug.c
@@ -925,9 +925,10 @@ static int fetch_to_dev_buffer(struct scsi_cmnd *scp, unsigned char *arr,
925static const char * inq_vendor_id = "Linux "; 925static const char * inq_vendor_id = "Linux ";
926static const char * inq_product_id = "scsi_debug "; 926static const char * inq_product_id = "scsi_debug ";
927static const char *inq_product_rev = "0186"; /* version less '.' */ 927static const char *inq_product_rev = "0186"; /* version less '.' */
928static const u64 naa5_comp_a = 0x5222222000000000ULL; 928/* Use some locally assigned NAAs for SAS addresses. */
929static const u64 naa5_comp_b = 0x5333333000000000ULL; 929static const u64 naa3_comp_a = 0x3222222000000000ULL;
930static const u64 naa5_comp_c = 0x5111111000000000ULL; 930static const u64 naa3_comp_b = 0x3333333000000000ULL;
931static const u64 naa3_comp_c = 0x3111111000000000ULL;
931 932
932/* Device identification VPD page. Returns number of bytes placed in arr */ 933/* Device identification VPD page. Returns number of bytes placed in arr */
933static int inquiry_vpd_83(unsigned char *arr, int port_group_id, 934static int inquiry_vpd_83(unsigned char *arr, int port_group_id,
@@ -961,12 +962,12 @@ static int inquiry_vpd_83(unsigned char *arr, int port_group_id,
961 memcpy(arr + num, lu_name, 16); 962 memcpy(arr + num, lu_name, 16);
962 num += 16; 963 num += 16;
963 } else { 964 } else {
964 /* NAA-5, Logical unit identifier (binary) */ 965 /* NAA-3, Logical unit identifier (binary) */
965 arr[num++] = 0x1; /* binary (not necessarily sas) */ 966 arr[num++] = 0x1; /* binary (not necessarily sas) */
966 arr[num++] = 0x3; /* PIV=0, lu, naa */ 967 arr[num++] = 0x3; /* PIV=0, lu, naa */
967 arr[num++] = 0x0; 968 arr[num++] = 0x0;
968 arr[num++] = 0x8; 969 arr[num++] = 0x8;
969 put_unaligned_be64(naa5_comp_b + dev_id_num, arr + num); 970 put_unaligned_be64(naa3_comp_b + dev_id_num, arr + num);
970 num += 8; 971 num += 8;
971 } 972 }
972 /* Target relative port number */ 973 /* Target relative port number */
@@ -979,14 +980,14 @@ static int inquiry_vpd_83(unsigned char *arr, int port_group_id,
979 arr[num++] = 0x0; 980 arr[num++] = 0x0;
980 arr[num++] = 0x1; /* relative port A */ 981 arr[num++] = 0x1; /* relative port A */
981 } 982 }
982 /* NAA-5, Target port identifier */ 983 /* NAA-3, Target port identifier */
983 arr[num++] = 0x61; /* proto=sas, binary */ 984 arr[num++] = 0x61; /* proto=sas, binary */
984 arr[num++] = 0x93; /* piv=1, target port, naa */ 985 arr[num++] = 0x93; /* piv=1, target port, naa */
985 arr[num++] = 0x0; 986 arr[num++] = 0x0;
986 arr[num++] = 0x8; 987 arr[num++] = 0x8;
987 put_unaligned_be64(naa5_comp_a + port_a, arr + num); 988 put_unaligned_be64(naa3_comp_a + port_a, arr + num);
988 num += 8; 989 num += 8;
989 /* NAA-5, Target port group identifier */ 990 /* NAA-3, Target port group identifier */
990 arr[num++] = 0x61; /* proto=sas, binary */ 991 arr[num++] = 0x61; /* proto=sas, binary */
991 arr[num++] = 0x95; /* piv=1, target port group id */ 992 arr[num++] = 0x95; /* piv=1, target port group id */
992 arr[num++] = 0x0; 993 arr[num++] = 0x0;
@@ -995,19 +996,19 @@ static int inquiry_vpd_83(unsigned char *arr, int port_group_id,
995 arr[num++] = 0; 996 arr[num++] = 0;
996 put_unaligned_be16(port_group_id, arr + num); 997 put_unaligned_be16(port_group_id, arr + num);
997 num += 2; 998 num += 2;
998 /* NAA-5, Target device identifier */ 999 /* NAA-3, Target device identifier */
999 arr[num++] = 0x61; /* proto=sas, binary */ 1000 arr[num++] = 0x61; /* proto=sas, binary */
1000 arr[num++] = 0xa3; /* piv=1, target device, naa */ 1001 arr[num++] = 0xa3; /* piv=1, target device, naa */
1001 arr[num++] = 0x0; 1002 arr[num++] = 0x0;
1002 arr[num++] = 0x8; 1003 arr[num++] = 0x8;
1003 put_unaligned_be64(naa5_comp_a + target_dev_id, arr + num); 1004 put_unaligned_be64(naa3_comp_a + target_dev_id, arr + num);
1004 num += 8; 1005 num += 8;
1005 /* SCSI name string: Target device identifier */ 1006 /* SCSI name string: Target device identifier */
1006 arr[num++] = 0x63; /* proto=sas, UTF-8 */ 1007 arr[num++] = 0x63; /* proto=sas, UTF-8 */
1007 arr[num++] = 0xa8; /* piv=1, target device, SCSI name string */ 1008 arr[num++] = 0xa8; /* piv=1, target device, SCSI name string */
1008 arr[num++] = 0x0; 1009 arr[num++] = 0x0;
1009 arr[num++] = 24; 1010 arr[num++] = 24;
1010 memcpy(arr + num, "naa.52222220", 12); 1011 memcpy(arr + num, "naa.32222220", 12);
1011 num += 12; 1012 num += 12;
1012 snprintf(b, sizeof(b), "%08X", target_dev_id); 1013 snprintf(b, sizeof(b), "%08X", target_dev_id);
1013 memcpy(arr + num, b, 8); 1014 memcpy(arr + num, b, 8);
@@ -1086,7 +1087,7 @@ static int inquiry_vpd_88(unsigned char *arr, int target_dev_id)
1086 arr[num++] = 0x93; /* PIV=1, target port, NAA */ 1087 arr[num++] = 0x93; /* PIV=1, target port, NAA */
1087 arr[num++] = 0x0; /* reserved */ 1088 arr[num++] = 0x0; /* reserved */
1088 arr[num++] = 0x8; /* length */ 1089 arr[num++] = 0x8; /* length */
1089 put_unaligned_be64(naa5_comp_a + port_a, arr + num); 1090 put_unaligned_be64(naa3_comp_a + port_a, arr + num);
1090 num += 8; 1091 num += 8;
1091 arr[num++] = 0x0; /* reserved */ 1092 arr[num++] = 0x0; /* reserved */
1092 arr[num++] = 0x0; /* reserved */ 1093 arr[num++] = 0x0; /* reserved */
@@ -1101,7 +1102,7 @@ static int inquiry_vpd_88(unsigned char *arr, int target_dev_id)
1101 arr[num++] = 0x93; /* PIV=1, target port, NAA */ 1102 arr[num++] = 0x93; /* PIV=1, target port, NAA */
1102 arr[num++] = 0x0; /* reserved */ 1103 arr[num++] = 0x0; /* reserved */
1103 arr[num++] = 0x8; /* length */ 1104 arr[num++] = 0x8; /* length */
1104 put_unaligned_be64(naa5_comp_a + port_b, arr + num); 1105 put_unaligned_be64(naa3_comp_a + port_b, arr + num);
1105 num += 8; 1106 num += 8;
1106 1107
1107 return num; 1108 return num;
@@ -1931,10 +1932,10 @@ static int resp_sas_pcd_m_spg(unsigned char * p, int pcontrol, int target,
1931 }; 1932 };
1932 int port_a, port_b; 1933 int port_a, port_b;
1933 1934
1934 put_unaligned_be64(naa5_comp_a, sas_pcd_m_pg + 16); 1935 put_unaligned_be64(naa3_comp_a, sas_pcd_m_pg + 16);
1935 put_unaligned_be64(naa5_comp_c + 1, sas_pcd_m_pg + 24); 1936 put_unaligned_be64(naa3_comp_c + 1, sas_pcd_m_pg + 24);
1936 put_unaligned_be64(naa5_comp_a, sas_pcd_m_pg + 64); 1937 put_unaligned_be64(naa3_comp_a, sas_pcd_m_pg + 64);
1937 put_unaligned_be64(naa5_comp_c + 1, sas_pcd_m_pg + 72); 1938 put_unaligned_be64(naa3_comp_c + 1, sas_pcd_m_pg + 72);
1938 port_a = target_dev_id + 1; 1939 port_a = target_dev_id + 1;
1939 port_b = port_a + 1; 1940 port_b = port_a + 1;
1940 memcpy(p, sas_pcd_m_pg, sizeof(sas_pcd_m_pg)); 1941 memcpy(p, sas_pcd_m_pg, sizeof(sas_pcd_m_pg));