diff options
author | Douglas Gilbert <dgilbert@interlog.com> | 2016-05-06 00:40:29 -0400 |
---|---|---|
committer | Martin K. Petersen <martin.petersen@oracle.com> | 2016-05-10 21:26:14 -0400 |
commit | 1b37bd606deef0a787bdbbab6ff51dbebdeb9d3d (patch) | |
tree | eda18c9e8c36cc9e610f282623dc31ce542c8ce4 /drivers/scsi | |
parent | 09ba24c18c7e0c215c39b3d92332b64132dae170 (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.c | 35 |
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, | |||
925 | static const char * inq_vendor_id = "Linux "; | 925 | static const char * inq_vendor_id = "Linux "; |
926 | static const char * inq_product_id = "scsi_debug "; | 926 | static const char * inq_product_id = "scsi_debug "; |
927 | static const char *inq_product_rev = "0186"; /* version less '.' */ | 927 | static const char *inq_product_rev = "0186"; /* version less '.' */ |
928 | static const u64 naa5_comp_a = 0x5222222000000000ULL; | 928 | /* Use some locally assigned NAAs for SAS addresses. */ |
929 | static const u64 naa5_comp_b = 0x5333333000000000ULL; | 929 | static const u64 naa3_comp_a = 0x3222222000000000ULL; |
930 | static const u64 naa5_comp_c = 0x5111111000000000ULL; | 930 | static const u64 naa3_comp_b = 0x3333333000000000ULL; |
931 | static 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 */ |
933 | static int inquiry_vpd_83(unsigned char *arr, int port_group_id, | 934 | static 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)); |