Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

Merge branch '6.5/scsi-fixes' into 6.6/scsi-staging

Pull in the fixes tree for a commit that missed 6.5. Also resolve a
trivial merge conflict in fnic.

* 6.5/scsi-fixes: (36 commits)
scsi: storvsc: Handle additional SRB status values
scsi: snic: Fix double free in snic_tgt_create()
scsi: core: raid_class: Remove raid_component_add()
scsi: ufs: ufs-qcom: Clear qunipro_g4_sel for HW major version > 5
scsi: ufs: mcq: Fix the search/wrap around logic
scsi: qedf: Fix firmware halt over suspend and resume
scsi: qedi: Fix firmware halt over suspend and resume
scsi: qedi: Fix potential deadlock on &qedi_percpu->p_work_lock
scsi: lpfc: Remove reftag check in DIF paths
scsi: ufs: renesas: Fix private allocation
scsi: snic: Fix possible memory leak if device_add() fails
scsi: core: Fix possible memory leak if device_add() fails
scsi: core: Fix legacy /proc parsing buffer overflow
scsi: 53c700: Check that command slot is not NULL
scsi: fnic: Replace return codes in fnic_clean_pending_aborts()
scsi: storvsc: Fix handling of virtual Fibre Channel timeouts
scsi: pm80xx: Fix error return code in pm8001_pci_probe()
scsi: zfcp: Defer fc_rport blocking until after ADISC response
scsi: storvsc: Limit max_sectors for virtual Fibre Channel devices
scsi: sg: Fix checking return value of blk_get_queue()
...

Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>

+282 -235
+38 -38
Documentation/ABI/testing/sysfs-driver-ufs
··· 994 994 What: /sys/bus/platform/drivers/ufshcd/*/rpm_lvl 995 995 What: /sys/bus/platform/devices/*.ufs/rpm_lvl 996 996 Date: September 2014 997 - Contact: Subhash Jadavani <subhashj@codeaurora.org> 997 + Contact: Can Guo <quic_cang@quicinc.com> 998 998 Description: This entry could be used to set or show the UFS device 999 999 runtime power management level. The current driver 1000 1000 implementation supports 7 levels with next target states: ··· 1021 1021 What: /sys/bus/platform/drivers/ufshcd/*/rpm_target_dev_state 1022 1022 What: /sys/bus/platform/devices/*.ufs/rpm_target_dev_state 1023 1023 Date: February 2018 1024 - Contact: Subhash Jadavani <subhashj@codeaurora.org> 1024 + Contact: Can Guo <quic_cang@quicinc.com> 1025 1025 Description: This entry shows the target power mode of an UFS device 1026 1026 for the chosen runtime power management level. 1027 1027 ··· 1030 1030 What: /sys/bus/platform/drivers/ufshcd/*/rpm_target_link_state 1031 1031 What: /sys/bus/platform/devices/*.ufs/rpm_target_link_state 1032 1032 Date: February 2018 1033 - Contact: Subhash Jadavani <subhashj@codeaurora.org> 1033 + Contact: Can Guo <quic_cang@quicinc.com> 1034 1034 Description: This entry shows the target state of an UFS UIC link 1035 1035 for the chosen runtime power management level. 1036 1036 ··· 1039 1039 What: /sys/bus/platform/drivers/ufshcd/*/spm_lvl 1040 1040 What: /sys/bus/platform/devices/*.ufs/spm_lvl 1041 1041 Date: September 2014 1042 - Contact: Subhash Jadavani <subhashj@codeaurora.org> 1042 + Contact: Can Guo <quic_cang@quicinc.com> 1043 1043 Description: This entry could be used to set or show the UFS device 1044 1044 system power management level. The current driver 1045 1045 implementation supports 7 levels with next target states: ··· 1066 1066 What: /sys/bus/platform/drivers/ufshcd/*/spm_target_dev_state 1067 1067 What: /sys/bus/platform/devices/*.ufs/spm_target_dev_state 1068 1068 Date: February 2018 1069 - Contact: Subhash Jadavani <subhashj@codeaurora.org> 1069 + Contact: Can Guo <quic_cang@quicinc.com> 1070 1070 Description: This entry shows the target power mode of an UFS device 1071 1071 for the chosen system power management level. 1072 1072 ··· 1075 1075 What: /sys/bus/platform/drivers/ufshcd/*/spm_target_link_state 1076 1076 What: /sys/bus/platform/devices/*.ufs/spm_target_link_state 1077 1077 Date: February 2018 1078 - Contact: Subhash Jadavani <subhashj@codeaurora.org> 1078 + Contact: Can Guo <quic_cang@quicinc.com> 1079 1079 Description: This entry shows the target state of an UFS UIC link 1080 1080 for the chosen system power management level. 1081 1081 ··· 1084 1084 What: /sys/bus/platform/drivers/ufshcd/*/monitor/monitor_enable 1085 1085 What: /sys/bus/platform/devices/*.ufs/monitor/monitor_enable 1086 1086 Date: January 2021 1087 - Contact: Can Guo <cang@codeaurora.org> 1087 + Contact: Can Guo <quic_cang@quicinc.com> 1088 1088 Description: This file shows the status of performance monitor enablement 1089 1089 and it can be used to start/stop the monitor. When the monitor 1090 1090 is stopped, the performance data collected is also cleared. ··· 1092 1092 What: /sys/bus/platform/drivers/ufshcd/*/monitor/monitor_chunk_size 1093 1093 What: /sys/bus/platform/devices/*.ufs/monitor/monitor_chunk_size 1094 1094 Date: January 2021 1095 - Contact: Can Guo <cang@codeaurora.org> 1095 + Contact: Can Guo <quic_cang@quicinc.com> 1096 1096 Description: This file tells the monitor to focus on requests transferring 1097 1097 data of specific chunk size (in Bytes). 0 means any chunk size. 1098 1098 It can only be changed when monitor is disabled. ··· 1100 1100 What: /sys/bus/platform/drivers/ufshcd/*/monitor/read_total_sectors 1101 1101 What: /sys/bus/platform/devices/*.ufs/monitor/read_total_sectors 1102 1102 Date: January 2021 1103 - Contact: Can Guo <cang@codeaurora.org> 1103 + Contact: Can Guo <quic_cang@quicinc.com> 1104 1104 Description: This file shows how many sectors (in 512 Bytes) have been 1105 1105 sent from device to host after monitor gets started. 1106 1106 ··· 1109 1109 What: /sys/bus/platform/drivers/ufshcd/*/monitor/read_total_busy 1110 1110 What: /sys/bus/platform/devices/*.ufs/monitor/read_total_busy 1111 1111 Date: January 2021 1112 - Contact: Can Guo <cang@codeaurora.org> 1112 + Contact: Can Guo <quic_cang@quicinc.com> 1113 1113 Description: This file shows how long (in micro seconds) has been spent 1114 1114 sending data from device to host after monitor gets started. 1115 1115 ··· 1118 1118 What: /sys/bus/platform/drivers/ufshcd/*/monitor/read_nr_requests 1119 1119 What: /sys/bus/platform/devices/*.ufs/monitor/read_nr_requests 1120 1120 Date: January 2021 1121 - Contact: Can Guo <cang@codeaurora.org> 1121 + Contact: Can Guo <quic_cang@quicinc.com> 1122 1122 Description: This file shows how many read requests have been sent after 1123 1123 monitor gets started. 1124 1124 ··· 1127 1127 What: /sys/bus/platform/drivers/ufshcd/*/monitor/read_req_latency_max 1128 1128 What: /sys/bus/platform/devices/*.ufs/monitor/read_req_latency_max 1129 1129 Date: January 2021 1130 - Contact: Can Guo <cang@codeaurora.org> 1130 + Contact: Can Guo <quic_cang@quicinc.com> 1131 1131 Description: This file shows the maximum latency (in micro seconds) of 1132 1132 read requests after monitor gets started. 1133 1133 ··· 1136 1136 What: /sys/bus/platform/drivers/ufshcd/*/monitor/read_req_latency_min 1137 1137 What: /sys/bus/platform/devices/*.ufs/monitor/read_req_latency_min 1138 1138 Date: January 2021 1139 - Contact: Can Guo <cang@codeaurora.org> 1139 + Contact: Can Guo <quic_cang@quicinc.com> 1140 1140 Description: This file shows the minimum latency (in micro seconds) of 1141 1141 read requests after monitor gets started. 1142 1142 ··· 1145 1145 What: /sys/bus/platform/drivers/ufshcd/*/monitor/read_req_latency_avg 1146 1146 What: /sys/bus/platform/devices/*.ufs/monitor/read_req_latency_avg 1147 1147 Date: January 2021 1148 - Contact: Can Guo <cang@codeaurora.org> 1148 + Contact: Can Guo <quic_cang@quicinc.com> 1149 1149 Description: This file shows the average latency (in micro seconds) of 1150 1150 read requests after monitor gets started. 1151 1151 ··· 1154 1154 What: /sys/bus/platform/drivers/ufshcd/*/monitor/read_req_latency_sum 1155 1155 What: /sys/bus/platform/devices/*.ufs/monitor/read_req_latency_sum 1156 1156 Date: January 2021 1157 - Contact: Can Guo <cang@codeaurora.org> 1157 + Contact: Can Guo <quic_cang@quicinc.com> 1158 1158 Description: This file shows the total latency (in micro seconds) of 1159 1159 read requests sent after monitor gets started. 1160 1160 ··· 1163 1163 What: /sys/bus/platform/drivers/ufshcd/*/monitor/write_total_sectors 1164 1164 What: /sys/bus/platform/devices/*.ufs/monitor/write_total_sectors 1165 1165 Date: January 2021 1166 - Contact: Can Guo <cang@codeaurora.org> 1166 + Contact: Can Guo <quic_cang@quicinc.com> 1167 1167 Description: This file shows how many sectors (in 512 Bytes) have been sent 1168 1168 from host to device after monitor gets started. 1169 1169 ··· 1172 1172 What: /sys/bus/platform/drivers/ufshcd/*/monitor/write_total_busy 1173 1173 What: /sys/bus/platform/devices/*.ufs/monitor/write_total_busy 1174 1174 Date: January 2021 1175 - Contact: Can Guo <cang@codeaurora.org> 1175 + Contact: Can Guo <quic_cang@quicinc.com> 1176 1176 Description: This file shows how long (in micro seconds) has been spent 1177 1177 sending data from host to device after monitor gets started. 1178 1178 ··· 1181 1181 What: /sys/bus/platform/drivers/ufshcd/*/monitor/write_nr_requests 1182 1182 What: /sys/bus/platform/devices/*.ufs/monitor/write_nr_requests 1183 1183 Date: January 2021 1184 - Contact: Can Guo <cang@codeaurora.org> 1184 + Contact: Can Guo <quic_cang@quicinc.com> 1185 1185 Description: This file shows how many write requests have been sent after 1186 1186 monitor gets started. 1187 1187 ··· 1190 1190 What: /sys/bus/platform/drivers/ufshcd/*/monitor/write_req_latency_max 1191 1191 What: /sys/bus/platform/devices/*.ufs/monitor/write_req_latency_max 1192 1192 Date: January 2021 1193 - Contact: Can Guo <cang@codeaurora.org> 1193 + Contact: Can Guo <quic_cang@quicinc.com> 1194 1194 Description: This file shows the maximum latency (in micro seconds) of write 1195 1195 requests after monitor gets started. 1196 1196 ··· 1199 1199 What: /sys/bus/platform/drivers/ufshcd/*/monitor/write_req_latency_min 1200 1200 What: /sys/bus/platform/devices/*.ufs/monitor/write_req_latency_min 1201 1201 Date: January 2021 1202 - Contact: Can Guo <cang@codeaurora.org> 1202 + Contact: Can Guo <quic_cang@quicinc.com> 1203 1203 Description: This file shows the minimum latency (in micro seconds) of write 1204 1204 requests after monitor gets started. 1205 1205 ··· 1208 1208 What: /sys/bus/platform/drivers/ufshcd/*/monitor/write_req_latency_avg 1209 1209 What: /sys/bus/platform/devices/*.ufs/monitor/write_req_latency_avg 1210 1210 Date: January 2021 1211 - Contact: Can Guo <cang@codeaurora.org> 1211 + Contact: Can Guo <quic_cang@quicinc.com> 1212 1212 Description: This file shows the average latency (in micro seconds) of write 1213 1213 requests after monitor gets started. 1214 1214 ··· 1217 1217 What: /sys/bus/platform/drivers/ufshcd/*/monitor/write_req_latency_sum 1218 1218 What: /sys/bus/platform/devices/*.ufs/monitor/write_req_latency_sum 1219 1219 Date: January 2021 1220 - Contact: Can Guo <cang@codeaurora.org> 1220 + Contact: Can Guo <quic_cang@quicinc.com> 1221 1221 Description: This file shows the total latency (in micro seconds) of write 1222 1222 requests after monitor gets started. 1223 1223 ··· 1226 1226 What: /sys/bus/platform/drivers/ufshcd/*/device_descriptor/wb_presv_us_en 1227 1227 What: /sys/bus/platform/devices/*.ufs/device_descriptor/wb_presv_us_en 1228 1228 Date: June 2020 1229 - Contact: Asutosh Das <asutoshd@codeaurora.org> 1229 + Contact: Asutosh Das <quic_asutoshd@quicinc.com> 1230 1230 Description: This entry shows if preserve user-space was configured 1231 1231 1232 1232 The file is read only. ··· 1234 1234 What: /sys/bus/platform/drivers/ufshcd/*/device_descriptor/wb_shared_alloc_units 1235 1235 What: /sys/bus/platform/devices/*.ufs/device_descriptor/wb_shared_alloc_units 1236 1236 Date: June 2020 1237 - Contact: Asutosh Das <asutoshd@codeaurora.org> 1237 + Contact: Asutosh Das <quic_asutoshd@quicinc.com> 1238 1238 Description: This entry shows the shared allocated units of WB buffer 1239 1239 1240 1240 The file is read only. ··· 1242 1242 What: /sys/bus/platform/drivers/ufshcd/*/device_descriptor/wb_type 1243 1243 What: /sys/bus/platform/devices/*.ufs/device_descriptor/wb_type 1244 1244 Date: June 2020 1245 - Contact: Asutosh Das <asutoshd@codeaurora.org> 1245 + Contact: Asutosh Das <quic_asutoshd@quicinc.com> 1246 1246 Description: This entry shows the configured WB type. 1247 1247 0x1 for shared buffer mode. 0x0 for dedicated buffer mode. 1248 1248 ··· 1251 1251 What: /sys/bus/platform/drivers/ufshcd/*/geometry_descriptor/wb_buff_cap_adj 1252 1252 What: /sys/bus/platform/devices/*.ufs/geometry_descriptor/wb_buff_cap_adj 1253 1253 Date: June 2020 1254 - Contact: Asutosh Das <asutoshd@codeaurora.org> 1254 + Contact: Asutosh Das <quic_asutoshd@quicinc.com> 1255 1255 Description: This entry shows the total user-space decrease in shared 1256 1256 buffer mode. 1257 1257 The value of this parameter is 3 for TLC NAND when SLC mode ··· 1262 1262 What: /sys/bus/platform/drivers/ufshcd/*/geometry_descriptor/wb_max_alloc_units 1263 1263 What: /sys/bus/platform/devices/*.ufs/geometry_descriptor/wb_max_alloc_units 1264 1264 Date: June 2020 1265 - Contact: Asutosh Das <asutoshd@codeaurora.org> 1265 + Contact: Asutosh Das <quic_asutoshd@quicinc.com> 1266 1266 Description: This entry shows the Maximum total WriteBooster Buffer size 1267 1267 which is supported by the entire device. 1268 1268 ··· 1271 1271 What: /sys/bus/platform/drivers/ufshcd/*/geometry_descriptor/wb_max_wb_luns 1272 1272 What: /sys/bus/platform/devices/*.ufs/geometry_descriptor/wb_max_wb_luns 1273 1273 Date: June 2020 1274 - Contact: Asutosh Das <asutoshd@codeaurora.org> 1274 + Contact: Asutosh Das <quic_asutoshd@quicinc.com> 1275 1275 Description: This entry shows the maximum number of luns that can support 1276 1276 WriteBooster. 1277 1277 ··· 1280 1280 What: /sys/bus/platform/drivers/ufshcd/*/geometry_descriptor/wb_sup_red_type 1281 1281 What: /sys/bus/platform/devices/*.ufs/geometry_descriptor/wb_sup_red_type 1282 1282 Date: June 2020 1283 - Contact: Asutosh Das <asutoshd@codeaurora.org> 1283 + Contact: Asutosh Das <quic_asutoshd@quicinc.com> 1284 1284 Description: The supportability of user space reduction mode 1285 1285 and preserve user space mode. 1286 1286 00h: WriteBooster Buffer can be configured only in ··· 1295 1295 What: /sys/bus/platform/drivers/ufshcd/*/geometry_descriptor/wb_sup_wb_type 1296 1296 What: /sys/bus/platform/devices/*.ufs/geometry_descriptor/wb_sup_wb_type 1297 1297 Date: June 2020 1298 - Contact: Asutosh Das <asutoshd@codeaurora.org> 1298 + Contact: Asutosh Das <quic_asutoshd@quicinc.com> 1299 1299 Description: The supportability of WriteBooster Buffer type. 1300 1300 1301 1301 === ========================================================== ··· 1310 1310 What: /sys/bus/platform/drivers/ufshcd/*/flags/wb_enable 1311 1311 What: /sys/bus/platform/devices/*.ufs/flags/wb_enable 1312 1312 Date: June 2020 1313 - Contact: Asutosh Das <asutoshd@codeaurora.org> 1313 + Contact: Asutosh Das <quic_asutoshd@quicinc.com> 1314 1314 Description: This entry shows the status of WriteBooster. 1315 1315 1316 1316 == ============================ ··· 1323 1323 What: /sys/bus/platform/drivers/ufshcd/*/flags/wb_flush_en 1324 1324 What: /sys/bus/platform/devices/*.ufs/flags/wb_flush_en 1325 1325 Date: June 2020 1326 - Contact: Asutosh Das <asutoshd@codeaurora.org> 1326 + Contact: Asutosh Das <quic_asutoshd@quicinc.com> 1327 1327 Description: This entry shows if flush is enabled. 1328 1328 1329 1329 == ================================= ··· 1336 1336 What: /sys/bus/platform/drivers/ufshcd/*/flags/wb_flush_during_h8 1337 1337 What: /sys/bus/platform/devices/*.ufs/flags/wb_flush_during_h8 1338 1338 Date: June 2020 1339 - Contact: Asutosh Das <asutoshd@codeaurora.org> 1339 + Contact: Asutosh Das <quic_asutoshd@quicinc.com> 1340 1340 Description: Flush WriteBooster Buffer during hibernate state. 1341 1341 1342 1342 == ================================================= ··· 1351 1351 What: /sys/bus/platform/drivers/ufshcd/*/attributes/wb_avail_buf 1352 1352 What: /sys/bus/platform/devices/*.ufs/attributes/wb_avail_buf 1353 1353 Date: June 2020 1354 - Contact: Asutosh Das <asutoshd@codeaurora.org> 1354 + Contact: Asutosh Das <quic_asutoshd@quicinc.com> 1355 1355 Description: This entry shows the amount of unused WriteBooster buffer 1356 1356 available. 1357 1357 ··· 1360 1360 What: /sys/bus/platform/drivers/ufshcd/*/attributes/wb_cur_buf 1361 1361 What: /sys/bus/platform/devices/*.ufs/attributes/wb_cur_buf 1362 1362 Date: June 2020 1363 - Contact: Asutosh Das <asutoshd@codeaurora.org> 1363 + Contact: Asutosh Das <quic_asutoshd@quicinc.com> 1364 1364 Description: This entry shows the amount of unused current buffer. 1365 1365 1366 1366 The file is read only. ··· 1368 1368 What: /sys/bus/platform/drivers/ufshcd/*/attributes/wb_flush_status 1369 1369 What: /sys/bus/platform/devices/*.ufs/attributes/wb_flush_status 1370 1370 Date: June 2020 1371 - Contact: Asutosh Das <asutoshd@codeaurora.org> 1371 + Contact: Asutosh Das <quic_asutoshd@quicinc.com> 1372 1372 Description: This entry shows the flush operation status. 1373 1373 1374 1374 ··· 1385 1385 What: /sys/bus/platform/drivers/ufshcd/*/attributes/wb_life_time_est 1386 1386 What: /sys/bus/platform/devices/*.ufs/attributes/wb_life_time_est 1387 1387 Date: June 2020 1388 - Contact: Asutosh Das <asutoshd@codeaurora.org> 1388 + Contact: Asutosh Das <quic_asutoshd@quicinc.com> 1389 1389 Description: This entry shows an indication of the WriteBooster Buffer 1390 1390 lifetime based on the amount of performed program/erase cycles 1391 1391 ··· 1399 1399 1400 1400 What: /sys/class/scsi_device/*/device/unit_descriptor/wb_buf_alloc_units 1401 1401 Date: June 2020 1402 - Contact: Asutosh Das <asutoshd@codeaurora.org> 1402 + Contact: Asutosh Das <quic_asutoshd@quicinc.com> 1403 1403 Description: This entry shows the configured size of WriteBooster buffer. 1404 1404 0400h corresponds to 4GB. 1405 1405
+50 -36
block/blk-zoned.c
··· 442 442 unsigned long *conv_zones_bitmap; 443 443 unsigned long *seq_zones_wlock; 444 444 unsigned int nr_zones; 445 - sector_t zone_sectors; 446 445 sector_t sector; 447 446 }; 448 447 ··· 455 456 struct gendisk *disk = args->disk; 456 457 struct request_queue *q = disk->queue; 457 458 sector_t capacity = get_capacity(disk); 459 + sector_t zone_sectors = q->limits.chunk_sectors; 460 + 461 + /* Check for bad zones and holes in the zone report */ 462 + if (zone->start != args->sector) { 463 + pr_warn("%s: Zone gap at sectors %llu..%llu\n", 464 + disk->disk_name, args->sector, zone->start); 465 + return -ENODEV; 466 + } 467 + 468 + if (zone->start >= capacity || !zone->len) { 469 + pr_warn("%s: Invalid zone start %llu, length %llu\n", 470 + disk->disk_name, zone->start, zone->len); 471 + return -ENODEV; 472 + } 458 473 459 474 /* 460 475 * All zones must have the same size, with the exception on an eventual 461 476 * smaller last zone. 462 477 */ 463 - if (zone->start == 0) { 464 - if (zone->len == 0 || !is_power_of_2(zone->len)) { 465 - pr_warn("%s: Invalid zoned device with non power of two zone size (%llu)\n", 466 - disk->disk_name, zone->len); 467 - return -ENODEV; 468 - } 469 - 470 - args->zone_sectors = zone->len; 471 - args->nr_zones = (capacity + zone->len - 1) >> ilog2(zone->len); 472 - } else if (zone->start + args->zone_sectors < capacity) { 473 - if (zone->len != args->zone_sectors) { 478 + if (zone->start + zone->len < capacity) { 479 + if (zone->len != zone_sectors) { 474 480 pr_warn("%s: Invalid zoned device with non constant zone size\n", 475 481 disk->disk_name); 476 482 return -ENODEV; 477 483 } 478 - } else { 479 - if (zone->len > args->zone_sectors) { 480 - pr_warn("%s: Invalid zoned device with larger last zone size\n", 481 - disk->disk_name); 482 - return -ENODEV; 483 - } 484 - } 485 - 486 - /* Check for holes in the zone report */ 487 - if (zone->start != args->sector) { 488 - pr_warn("%s: Zone gap at sectors %llu..%llu\n", 489 - disk->disk_name, args->sector, zone->start); 484 + } else if (zone->len > zone_sectors) { 485 + pr_warn("%s: Invalid zoned device with larger last zone size\n", 486 + disk->disk_name); 490 487 return -ENODEV; 491 488 } 492 489 ··· 521 526 * @disk: Target disk 522 527 * @update_driver_data: Callback to update driver data on the frozen disk 523 528 * 524 - * Helper function for low-level device drivers to (re) allocate and initialize 525 - * a disk request queue zone bitmaps. This functions should normally be called 526 - * within the disk ->revalidate method for blk-mq based drivers. For BIO based 527 - * drivers only q->nr_zones needs to be updated so that the sysfs exposed value 528 - * is correct. 529 + * Helper function for low-level device drivers to check and (re) allocate and 530 + * initialize a disk request queue zone bitmaps. This functions should normally 531 + * be called within the disk ->revalidate method for blk-mq based drivers. 532 + * Before calling this function, the device driver must already have set the 533 + * device zone size (chunk_sector limit) and the max zone append limit. 534 + * For BIO based drivers, this function cannot be used. BIO based device drivers 535 + * only need to set disk->nr_zones so that the sysfs exposed value is correct. 529 536 * If the @update_driver_data callback function is not NULL, the callback is 530 537 * executed with the device request queue frozen after all zones have been 531 538 * checked. ··· 536 539 void (*update_driver_data)(struct gendisk *disk)) 537 540 { 538 541 struct request_queue *q = disk->queue; 539 - struct blk_revalidate_zone_args args = { 540 - .disk = disk, 541 - }; 542 + sector_t zone_sectors = q->limits.chunk_sectors; 543 + sector_t capacity = get_capacity(disk); 544 + struct blk_revalidate_zone_args args = { }; 542 545 unsigned int noio_flag; 543 546 int ret; 544 547 ··· 547 550 if (WARN_ON_ONCE(!queue_is_mq(q))) 548 551 return -EIO; 549 552 550 - if (!get_capacity(disk)) 551 - return -EIO; 553 + if (!capacity) 554 + return -ENODEV; 555 + 556 + /* 557 + * Checks that the device driver indicated a valid zone size and that 558 + * the max zone append limit is set. 559 + */ 560 + if (!zone_sectors || !is_power_of_2(zone_sectors)) { 561 + pr_warn("%s: Invalid non power of two zone size (%llu)\n", 562 + disk->disk_name, zone_sectors); 563 + return -ENODEV; 564 + } 565 + 566 + if (!q->limits.max_zone_append_sectors) { 567 + pr_warn("%s: Invalid 0 maximum zone append limit\n", 568 + disk->disk_name); 569 + return -ENODEV; 570 + } 552 571 553 572 /* 554 573 * Ensure that all memory allocations in this context are done as if 555 574 * GFP_NOIO was specified. 556 575 */ 576 + args.disk = disk; 577 + args.nr_zones = (capacity + zone_sectors - 1) >> ilog2(zone_sectors); 557 578 noio_flag = memalloc_noio_save(); 558 579 ret = disk->fops->report_zones(disk, 0, UINT_MAX, 559 580 blk_revalidate_zone_cb, &args); ··· 585 570 * If zones where reported, make sure that the entire disk capacity 586 571 * has been checked. 587 572 */ 588 - if (ret > 0 && args.sector != get_capacity(disk)) { 573 + if (ret > 0 && args.sector != capacity) { 589 574 pr_warn("%s: Missing zones from sector %llu\n", 590 575 disk->disk_name, args.sector); 591 576 ret = -ENODEV; ··· 598 583 */ 599 584 blk_mq_freeze_queue(q); 600 585 if (ret > 0) { 601 - blk_queue_chunk_sectors(q, args.zone_sectors); 602 586 disk->nr_zones = args.nr_zones; 603 587 swap(disk->seq_zones_wlock, args.seq_zones_wlock); 604 588 swap(disk->conv_zones_bitmap, args.conv_zones_bitmap);
+5 -11
drivers/block/null_blk/zoned.c
··· 162 162 disk_set_zoned(nullb->disk, BLK_ZONED_HM); 163 163 blk_queue_flag_set(QUEUE_FLAG_ZONE_RESETALL, q); 164 164 blk_queue_required_elevator_features(q, ELEVATOR_F_ZBD_SEQ_WRITE); 165 - 166 - if (queue_is_mq(q)) { 167 - int ret = blk_revalidate_disk_zones(nullb->disk, NULL); 168 - 169 - if (ret) 170 - return ret; 171 - } else { 172 - blk_queue_chunk_sectors(q, dev->zone_size_sects); 173 - nullb->disk->nr_zones = bdev_nr_zones(nullb->disk->part0); 174 - } 175 - 165 + blk_queue_chunk_sectors(q, dev->zone_size_sects); 166 + nullb->disk->nr_zones = bdev_nr_zones(nullb->disk->part0); 176 167 blk_queue_max_zone_append_sectors(q, dev->zone_size_sects); 177 168 disk_set_max_open_zones(nullb->disk, dev->zone_max_open); 178 169 disk_set_max_active_zones(nullb->disk, dev->zone_max_active); 170 + 171 + if (queue_is_mq(q)) 172 + return blk_revalidate_disk_zones(nullb->disk, NULL); 179 173 180 174 return 0; 181 175 }
+15 -19
drivers/block/virtio_blk.c
··· 751 751 { 752 752 u32 v, wg; 753 753 u8 model; 754 - int ret; 755 754 756 755 virtio_cread(vdev, struct virtio_blk_config, 757 756 zoned.model, &model); ··· 805 806 vblk->zone_sectors); 806 807 return -ENODEV; 807 808 } 809 + blk_queue_chunk_sectors(q, vblk->zone_sectors); 808 810 dev_dbg(&vdev->dev, "zone sectors = %u\n", vblk->zone_sectors); 809 811 810 812 if (virtio_has_feature(vdev, VIRTIO_BLK_F_DISCARD)) { ··· 814 814 blk_queue_max_discard_sectors(q, 0); 815 815 } 816 816 817 - ret = blk_revalidate_disk_zones(vblk->disk, NULL); 818 - if (!ret) { 819 - virtio_cread(vdev, struct virtio_blk_config, 820 - zoned.max_append_sectors, &v); 821 - if (!v) { 822 - dev_warn(&vdev->dev, "zero max_append_sectors reported\n"); 823 - return -ENODEV; 824 - } 825 - if ((v << SECTOR_SHIFT) < wg) { 826 - dev_err(&vdev->dev, 827 - "write granularity %u exceeds max_append_sectors %u limit\n", 828 - wg, v); 829 - return -ENODEV; 830 - } 831 - 832 - blk_queue_max_zone_append_sectors(q, v); 833 - dev_dbg(&vdev->dev, "max append sectors = %u\n", v); 817 + virtio_cread(vdev, struct virtio_blk_config, 818 + zoned.max_append_sectors, &v); 819 + if (!v) { 820 + dev_warn(&vdev->dev, "zero max_append_sectors reported\n"); 821 + return -ENODEV; 834 822 } 823 + if ((v << SECTOR_SHIFT) < wg) { 824 + dev_err(&vdev->dev, 825 + "write granularity %u exceeds max_append_sectors %u limit\n", 826 + wg, v); 827 + return -ENODEV; 828 + } 829 + blk_queue_max_zone_append_sectors(q, v); 830 + dev_dbg(&vdev->dev, "max append sectors = %u\n", v); 835 831 836 - return ret; 832 + return blk_revalidate_disk_zones(vblk->disk, NULL); 837 833 } 838 834 839 835 #else
+4 -5
drivers/nvme/host/zns.c
··· 10 10 int nvme_revalidate_zones(struct nvme_ns *ns) 11 11 { 12 12 struct request_queue *q = ns->queue; 13 - int ret; 14 13 15 - ret = blk_revalidate_disk_zones(ns->disk, NULL); 16 - if (!ret) 17 - blk_queue_max_zone_append_sectors(q, ns->ctrl->max_zone_append); 18 - return ret; 14 + blk_queue_chunk_sectors(q, ns->zsze); 15 + blk_queue_max_zone_append_sectors(q, ns->ctrl->max_zone_append); 16 + 17 + return blk_revalidate_disk_zones(ns->disk, NULL); 19 18 } 20 19 21 20 static int nvme_set_max_append(struct nvme_ctrl *ctrl)
+1 -5
drivers/s390/scsi/zfcp_fc.c
··· 534 534 535 535 /* re-init to undo drop from zfcp_fc_adisc() */ 536 536 port->d_id = ntoh24(adisc_resp->adisc_port_id); 537 - /* port is good, unblock rport without going through erp */ 538 - zfcp_scsi_schedule_rport_register(port); 537 + /* port is still good, nothing to do */ 539 538 out: 540 539 atomic_andnot(ZFCP_STATUS_PORT_LINK_TEST, &port->status); 541 540 put_device(&port->dev); ··· 594 595 int retval; 595 596 596 597 set_worker_desc("zadisc%16llx", port->wwpn); /* < WORKER_DESC_LEN=24 */ 597 - get_device(&port->dev); 598 - port->rport_task = RPORT_DEL; 599 - zfcp_scsi_rport_work(&port->rport_work); 600 598 601 599 /* only issue one test command at one time per port */ 602 600 if (atomic_read(&port->status) & ZFCP_STATUS_PORT_LINK_TEST)
+1 -1
drivers/scsi/53c700.c
··· 1598 1598 printk("scsi%d (%d:%d) PHASE MISMATCH IN SEND MESSAGE %d remain, return %p[%04x], phase %s\n", host->host_no, pun, lun, count, (void *)temp, temp - hostdata->pScript, sbcl_to_string(NCR_700_readb(host, SBCL_REG))); 1599 1599 #endif 1600 1600 resume_offset = hostdata->pScript + Ent_SendMessagePhaseMismatch; 1601 - } else if(dsp >= to32bit(&slot->pSG[0].ins) && 1601 + } else if (slot && dsp >= to32bit(&slot->pSG[0].ins) && 1602 1602 dsp <= to32bit(&slot->pSG[NCR_700_SG_SEGMENTS].ins)) { 1603 1603 int data_transfer = NCR_700_readl(host, DBC_REG) & 0xffffff; 1604 1604 int SGcount = (dsp - to32bit(&slot->pSG[0].ins))/sizeof(struct NCR_700_SG_List);
+1 -1
drivers/scsi/aacraid/aacraid.h
··· 2618 2618 struct aac_aifcmd { 2619 2619 __le32 command; /* Tell host what type of notify this is */ 2620 2620 __le32 seqnum; /* To allow ordering of reports (if necessary) */ 2621 - u8 data[1]; /* Undefined length (from kernel viewpoint) */ 2621 + u8 data[]; /* Undefined length (from kernel viewpoint) */ 2622 2622 }; 2623 2623 2624 2624 /**
+4 -2
drivers/scsi/fnic/fnic_scsi.c
··· 2139 2139 bool new_sc) 2140 2140 2141 2141 { 2142 - int ret = SUCCESS; 2142 + int ret = 0; 2143 2143 struct fnic_pending_aborts_iter_data iter_data = { 2144 2144 .fnic = fnic, 2145 2145 .lun_dev = lr_sc->device, ··· 2159 2159 2160 2160 /* walk again to check, if IOs are still pending in fw */ 2161 2161 if (fnic_is_abts_pending(fnic, lr_sc)) 2162 - ret = FAILED; 2162 + ret = 1; 2163 2163 2164 2164 clean_pending_aborts_end: 2165 + FNIC_SCSI_DBG(KERN_INFO, fnic->lport->host, 2166 + "%s: exit status: %d\n", __func__, ret); 2165 2167 return ret; 2166 2168 } 2167 2169
+1 -1
drivers/scsi/fnic/fnic_trace.c
··· 465 465 fnic_max_trace_entries = (trace_max_pages * PAGE_SIZE)/ 466 466 FNIC_ENTRY_SIZE_BYTES; 467 467 468 - fnic_trace_buf_p = (unsigned long)vzalloc(trace_max_pages * PAGE_SIZE); 468 + fnic_trace_buf_p = (unsigned long)vcalloc(trace_max_pages, PAGE_SIZE); 469 469 if (!fnic_trace_buf_p) { 470 470 printk(KERN_ERR PFX "Failed to allocate memory " 471 471 "for fnic_trace_buf_p\n");
+2
drivers/scsi/lpfc/lpfc_hbadisc.c
··· 6971 6971 if (rc) 6972 6972 return; 6973 6973 /* Reset HBA FCF states after successful unregister FCF */ 6974 + spin_lock_irq(&phba->hbalock); 6974 6975 phba->fcf.fcf_flag = 0; 6976 + spin_unlock_irq(&phba->hbalock); 6975 6977 phba->fcf.current_rec.flag = 0; 6976 6978 6977 6979 /*
+3 -17
drivers/scsi/lpfc/lpfc_scsi.c
··· 109 109 } 110 110 } 111 111 112 - #define LPFC_INVALID_REFTAG ((u32)-1) 113 - 114 112 /** 115 113 * lpfc_rampdown_queue_depth - Post RAMP_DOWN_QUEUE event to worker thread 116 114 * @phba: The Hba for which this call is being executed. ··· 976 978 977 979 sgpe = scsi_prot_sglist(sc); 978 980 lba = scsi_prot_ref_tag(sc); 979 - if (lba == LPFC_INVALID_REFTAG) 980 - return 0; 981 981 982 982 /* First check if we need to match the LBA */ 983 983 if (phba->lpfc_injerr_lba != LPFC_INJERR_LBA_OFF) { ··· 1556 1560 1557 1561 /* extract some info from the scsi command for pde*/ 1558 1562 reftag = scsi_prot_ref_tag(sc); 1559 - if (reftag == LPFC_INVALID_REFTAG) 1560 - goto out; 1561 1563 1562 1564 #ifdef CONFIG_SCSI_LPFC_DEBUG_FS 1563 1565 rc = lpfc_bg_err_inject(phba, sc, &reftag, NULL, 1); ··· 1717 1723 /* extract some info from the scsi command */ 1718 1724 blksize = scsi_prot_interval(sc); 1719 1725 reftag = scsi_prot_ref_tag(sc); 1720 - if (reftag == LPFC_INVALID_REFTAG) 1721 - goto out; 1722 1726 1723 1727 #ifdef CONFIG_SCSI_LPFC_DEBUG_FS 1724 1728 rc = lpfc_bg_err_inject(phba, sc, &reftag, NULL, 1); ··· 1945 1953 1946 1954 /* extract some info from the scsi command for pde*/ 1947 1955 reftag = scsi_prot_ref_tag(sc); 1948 - if (reftag == LPFC_INVALID_REFTAG) 1949 - goto out; 1950 1956 1951 1957 #ifdef CONFIG_SCSI_LPFC_DEBUG_FS 1952 1958 rc = lpfc_bg_err_inject(phba, sc, &reftag, NULL, 1); ··· 2144 2154 /* extract some info from the scsi command */ 2145 2155 blksize = scsi_prot_interval(sc); 2146 2156 reftag = scsi_prot_ref_tag(sc); 2147 - if (reftag == LPFC_INVALID_REFTAG) 2148 - goto out; 2149 2157 2150 2158 #ifdef CONFIG_SCSI_LPFC_DEBUG_FS 2151 2159 rc = lpfc_bg_err_inject(phba, sc, &reftag, NULL, 1); ··· 2734 2746 2735 2747 src = (struct scsi_dif_tuple *)sg_virt(sgpe); 2736 2748 start_ref_tag = scsi_prot_ref_tag(cmd); 2737 - if (start_ref_tag == LPFC_INVALID_REFTAG) 2738 - goto out; 2739 2749 start_app_tag = src->app_tag; 2740 2750 len = sgpe->length; 2741 2751 while (src && protsegcnt) { ··· 3479 3493 scsi_cmnd->sc_data_direction); 3480 3494 3481 3495 lpfc_printf_log(phba, KERN_ERR, LOG_TRACE_EVENT, 3482 - "9084 Cannot setup S/G List for HBA" 3483 - "IO segs %d/%d SGL %d SCSI %d: %d %d\n", 3496 + "9084 Cannot setup S/G List for HBA " 3497 + "IO segs %d/%d SGL %d SCSI %d: %d %d %d\n", 3484 3498 lpfc_cmd->seg_cnt, lpfc_cmd->prot_seg_cnt, 3485 3499 phba->cfg_total_seg_cnt, phba->cfg_sg_seg_cnt, 3486 - prot_group_type, num_sge); 3500 + prot_group_type, num_sge, ret); 3487 3501 3488 3502 lpfc_cmd->seg_cnt = 0; 3489 3503 lpfc_cmd->prot_seg_cnt = 0;
+2 -1
drivers/scsi/pm8001/pm8001_init.c
··· 1178 1178 pm80xx_set_thermal_config(pm8001_ha); 1179 1179 } 1180 1180 1181 - if (pm8001_init_sas_add(pm8001_ha)) 1181 + rc = pm8001_init_sas_add(pm8001_ha); 1182 + if (rc) 1182 1183 goto err_out_shost; 1183 1184 /* phy setting support for motherboard controller */ 1184 1185 rc = pm8001_configure_phy_settings(pm8001_ha);
+18
drivers/scsi/qedf/qedf_main.c
··· 31 31 static void qedf_shutdown(struct pci_dev *pdev); 32 32 static void qedf_schedule_recovery_handler(void *dev); 33 33 static void qedf_recovery_handler(struct work_struct *work); 34 + static int qedf_suspend(struct pci_dev *pdev, pm_message_t state); 34 35 35 36 /* 36 37 * Driver module parameters. ··· 3272 3271 .probe = qedf_probe, 3273 3272 .remove = qedf_remove, 3274 3273 .shutdown = qedf_shutdown, 3274 + .suspend = qedf_suspend, 3275 3275 }; 3276 3276 3277 3277 static int __qedf_probe(struct pci_dev *pdev, int mode) ··· 4000 3998 static void qedf_shutdown(struct pci_dev *pdev) 4001 3999 { 4002 4000 __qedf_remove(pdev, QEDF_MODE_NORMAL); 4001 + } 4002 + 4003 + static int qedf_suspend(struct pci_dev *pdev, pm_message_t state) 4004 + { 4005 + struct qedf_ctx *qedf; 4006 + 4007 + if (!pdev) { 4008 + QEDF_ERR(NULL, "pdev is NULL.\n"); 4009 + return -ENODEV; 4010 + } 4011 + 4012 + qedf = pci_get_drvdata(pdev); 4013 + 4014 + QEDF_ERR(&qedf->dbg_ctx, "%s: Device does not support suspend operation\n", __func__); 4015 + 4016 + return -EPERM; 4003 4017 } 4004 4018 4005 4019 /*
+21 -2
drivers/scsi/qedi/qedi_main.c
··· 69 69 static void qedi_recovery_handler(struct work_struct *work); 70 70 static void qedi_schedule_hw_err_handler(void *dev, 71 71 enum qed_hw_err_type err_type); 72 + static int qedi_suspend(struct pci_dev *pdev, pm_message_t state); 72 73 73 74 static int qedi_iscsi_event_cb(void *context, u8 fw_event_code, void *fw_handle) 74 75 { ··· 1977 1976 struct qedi_percpu_s *p = this_cpu_ptr(&qedi_percpu); 1978 1977 struct qedi_work *work, *tmp; 1979 1978 struct task_struct *thread; 1979 + unsigned long flags; 1980 1980 1981 - spin_lock_bh(&p->p_work_lock); 1981 + spin_lock_irqsave(&p->p_work_lock, flags); 1982 1982 thread = p->iothread; 1983 1983 p->iothread = NULL; 1984 1984 ··· 1990 1988 kfree(work); 1991 1989 } 1992 1990 1993 - spin_unlock_bh(&p->p_work_lock); 1991 + spin_unlock_irqrestore(&p->p_work_lock, flags); 1994 1992 if (thread) 1995 1993 kthread_stop(thread); 1996 1994 return 0; ··· 2512 2510 __qedi_remove(pdev, QEDI_MODE_SHUTDOWN); 2513 2511 } 2514 2512 2513 + static int qedi_suspend(struct pci_dev *pdev, pm_message_t state) 2514 + { 2515 + struct qedi_ctx *qedi; 2516 + 2517 + if (!pdev) { 2518 + QEDI_ERR(NULL, "pdev is NULL.\n"); 2519 + return -ENODEV; 2520 + } 2521 + 2522 + qedi = pci_get_drvdata(pdev); 2523 + 2524 + QEDI_ERR(&qedi->dbg_ctx, "%s: Device does not support suspend operation\n", __func__); 2525 + 2526 + return -EPERM; 2527 + } 2528 + 2515 2529 static int __qedi_probe(struct pci_dev *pdev, int mode) 2516 2530 { 2517 2531 struct qedi_ctx *qedi; ··· 2886 2868 .remove = qedi_remove, 2887 2869 .shutdown = qedi_shutdown, 2888 2870 .err_handler = &qedi_err_handler, 2871 + .suspend = qedi_suspend, 2889 2872 }; 2890 2873 2891 2874 static int __init qedi_init(void)
-1
drivers/scsi/qla2xxx/qla_def.h
··· 4502 4502 4503 4503 /* n2n */ 4504 4504 struct fc_els_flogi plogi_els_payld; 4505 - #define LOGIN_TEMPLATE_SIZE (sizeof(struct fc_els_flogi) - 4) 4506 4505 4507 4506 void *swl; 4508 4507
+2 -2
drivers/scsi/qla2xxx/qla_init.c
··· 8499 8499 ql_dbg(ql_dbg_init, vha, 0x0163, 8500 8500 "-> fwdt%u template allocate template %#x words...\n", 8501 8501 j, risc_size); 8502 - fwdt->template = vmalloc(risc_size * sizeof(*dcode)); 8502 + fwdt->template = vmalloc_array(risc_size, sizeof(*dcode)); 8503 8503 if (!fwdt->template) { 8504 8504 ql_log(ql_log_warn, vha, 0x0164, 8505 8505 "-> fwdt%u failed allocate template.\n", j); ··· 8754 8754 ql_dbg(ql_dbg_init, vha, 0x0173, 8755 8755 "-> fwdt%u template allocate template %#x words...\n", 8756 8756 j, risc_size); 8757 - fwdt->template = vmalloc(risc_size * sizeof(*dcode)); 8757 + fwdt->template = vmalloc_array(risc_size, sizeof(*dcode)); 8758 8758 if (!fwdt->template) { 8759 8759 ql_log(ql_log_warn, vha, 0x0174, 8760 8760 "-> fwdt%u failed allocate template.\n", j);
+3 -2
drivers/scsi/qla2xxx/qla_iocb.c
··· 3072 3072 memset(ptr, 0, sizeof(struct els_plogi_payload)); 3073 3073 memset(resp_ptr, 0, sizeof(struct els_plogi_payload)); 3074 3074 memcpy(elsio->u.els_plogi.els_plogi_pyld->data, 3075 - &ha->plogi_els_payld.fl_csp, LOGIN_TEMPLATE_SIZE); 3075 + (void *)&ha->plogi_els_payld + offsetof(struct fc_els_flogi, fl_csp), 3076 + sizeof(ha->plogi_els_payld) - offsetof(struct fc_els_flogi, fl_csp)); 3076 3077 3077 3078 elsio->u.els_plogi.els_cmd = els_opcode; 3078 3079 elsio->u.els_plogi.els_plogi_pyld->opcode = els_opcode; ··· 3920 3919 3921 3920 pkt = __qla2x00_alloc_iocbs(sp->qpair, sp); 3922 3921 if (!pkt) { 3923 - rval = EAGAIN; 3922 + rval = -EAGAIN; 3924 3923 ql_log(ql_log_warn, vha, 0x700c, 3925 3924 "qla2x00_alloc_iocbs failed.\n"); 3926 3925 goto done;
-47
drivers/scsi/raid_class.c
··· 209 209 raid_attr_ro_fn(resync); 210 210 raid_attr_ro_state_fn(state); 211 211 212 - static void raid_component_release(struct device *dev) 213 - { 214 - struct raid_component *rc = 215 - container_of(dev, struct raid_component, dev); 216 - dev_printk(KERN_ERR, rc->dev.parent, "COMPONENT RELEASE\n"); 217 - put_device(rc->dev.parent); 218 - kfree(rc); 219 - } 220 - 221 - int raid_component_add(struct raid_template *r,struct device *raid_dev, 222 - struct device *component_dev) 223 - { 224 - struct device *cdev = 225 - attribute_container_find_class_device(&r->raid_attrs.ac, 226 - raid_dev); 227 - struct raid_component *rc; 228 - struct raid_data *rd = dev_get_drvdata(cdev); 229 - int err; 230 - 231 - rc = kzalloc(sizeof(*rc), GFP_KERNEL); 232 - if (!rc) 233 - return -ENOMEM; 234 - 235 - INIT_LIST_HEAD(&rc->node); 236 - device_initialize(&rc->dev); 237 - rc->dev.release = raid_component_release; 238 - rc->dev.parent = get_device(component_dev); 239 - rc->num = rd->component_count++; 240 - 241 - dev_set_name(&rc->dev, "component-%d", rc->num); 242 - list_add_tail(&rc->node, &rd->component_list); 243 - rc->dev.class = &raid_class.class; 244 - err = device_add(&rc->dev); 245 - if (err) 246 - goto err_out; 247 - 248 - return 0; 249 - 250 - err_out: 251 - list_del(&rc->node); 252 - rd->component_count--; 253 - put_device(component_dev); 254 - kfree(rc); 255 - return err; 256 - } 257 - EXPORT_SYMBOL(raid_component_add); 258 - 259 212 struct raid_template * 260 213 raid_class_attach(struct raid_function_template *ft) 261 214 {
-8
drivers/scsi/scsi_debug.c
··· 841 841 static int submit_queues = DEF_SUBMIT_QUEUES; /* > 1 for multi-queue (mq) */ 842 842 static int poll_queues; /* iouring iopoll interface.*/ 843 843 844 - static DEFINE_RWLOCK(atomic_rw); 845 - static DEFINE_RWLOCK(atomic_rw2); 846 - 847 - static rwlock_t *ramdisk_lck_a[2]; 848 - 849 844 static char sdebug_proc_name[] = MY_NAME; 850 845 static const char *my_name = MY_NAME; 851 846 ··· 6812 6817 unsigned long sz; 6813 6818 int k, ret, hosts_to_add; 6814 6819 int idx = -1; 6815 - 6816 - ramdisk_lck_a[0] = &atomic_rw; 6817 - ramdisk_lck_a[1] = &atomic_rw2; 6818 6820 6819 6821 if (sdebug_ndelay >= 1000 * 1000 * 1000) { 6820 6822 pr_warn("ndelay must be less than 1 second, ignored\n");
+17 -13
drivers/scsi/scsi_proc.c
··· 406 406 size_t length, loff_t *ppos) 407 407 { 408 408 int host, channel, id, lun; 409 - char *buffer, *p; 409 + char *buffer, *end, *p; 410 410 int err; 411 411 412 412 if (!buf || length > PAGE_SIZE) ··· 421 421 goto out; 422 422 423 423 err = -EINVAL; 424 - if (length < PAGE_SIZE) 425 - buffer[length] = '\0'; 426 - else if (buffer[PAGE_SIZE-1]) 427 - goto out; 424 + if (length < PAGE_SIZE) { 425 + end = buffer + length; 426 + *end = '\0'; 427 + } else { 428 + end = buffer + PAGE_SIZE - 1; 429 + if (*end) 430 + goto out; 431 + } 428 432 429 433 /* 430 434 * Usage: echo "scsi add-single-device 0 1 2 3" >/proc/scsi/scsi ··· 437 433 if (!strncmp("scsi add-single-device", buffer, 22)) { 438 434 p = buffer + 23; 439 435 440 - host = simple_strtoul(p, &p, 0); 441 - channel = simple_strtoul(p + 1, &p, 0); 442 - id = simple_strtoul(p + 1, &p, 0); 443 - lun = simple_strtoul(p + 1, &p, 0); 436 + host = (p < end) ? simple_strtoul(p, &p, 0) : 0; 437 + channel = (p + 1 < end) ? simple_strtoul(p + 1, &p, 0) : 0; 438 + id = (p + 1 < end) ? simple_strtoul(p + 1, &p, 0) : 0; 439 + lun = (p + 1 < end) ? simple_strtoul(p + 1, &p, 0) : 0; 444 440 445 441 err = scsi_add_single_device(host, channel, id, lun); 446 442 ··· 451 447 } else if (!strncmp("scsi remove-single-device", buffer, 25)) { 452 448 p = buffer + 26; 453 449 454 - host = simple_strtoul(p, &p, 0); 455 - channel = simple_strtoul(p + 1, &p, 0); 456 - id = simple_strtoul(p + 1, &p, 0); 457 - lun = simple_strtoul(p + 1, &p, 0); 450 + host = (p < end) ? simple_strtoul(p, &p, 0) : 0; 451 + channel = (p + 1 < end) ? simple_strtoul(p + 1, &p, 0) : 0; 452 + id = (p + 1 < end) ? simple_strtoul(p + 1, &p, 0) : 0; 453 + lun = (p + 1 < end) ? simple_strtoul(p + 1, &p, 0) : 0; 458 454 459 455 err = scsi_remove_single_device(host, channel, id, lun); 460 456 }
+5 -7
drivers/scsi/sd_zbc.c
··· 831 831 struct request_queue *q = disk->queue; 832 832 u32 zone_blocks = sdkp->early_zone_info.zone_blocks; 833 833 unsigned int nr_zones = sdkp->early_zone_info.nr_zones; 834 - u32 max_append; 835 834 int ret = 0; 836 835 unsigned int flags; 837 836 ··· 875 876 goto unlock; 876 877 } 877 878 879 + blk_queue_chunk_sectors(q, 880 + logical_to_sectors(sdkp->device, zone_blocks)); 881 + blk_queue_max_zone_append_sectors(q, 882 + q->limits.max_segments << PAGE_SECTORS_SHIFT); 883 + 878 884 ret = blk_revalidate_disk_zones(disk, sd_zbc_revalidate_zones_cb); 879 885 880 886 memalloc_noio_restore(flags); ··· 891 887 sdkp->capacity = 0; 892 888 goto unlock; 893 889 } 894 - 895 - max_append = min_t(u32, logical_to_sectors(sdkp->device, zone_blocks), 896 - q->limits.max_segments << PAGE_SECTORS_SHIFT); 897 - max_append = min_t(u32, max_append, queue_max_hw_sectors(q)); 898 - 899 - blk_queue_max_zone_append_sectors(q, max_append); 900 890 901 891 sd_zbc_print_zones(sdkp); 902 892
+4 -3
drivers/scsi/sg.c
··· 1497 1497 int error; 1498 1498 unsigned long iflags; 1499 1499 1500 - error = blk_get_queue(scsidp->request_queue); 1501 - if (error) 1502 - return error; 1500 + if (!blk_get_queue(scsidp->request_queue)) { 1501 + pr_warn("%s: get scsi_device queue failed\n", __func__); 1502 + return -ENODEV; 1503 + } 1503 1504 1504 1505 error = -ENOMEM; 1505 1506 cdev = cdev_alloc();
+1 -1
drivers/scsi/snic/snic_disc.c
··· 307 307 spin_lock_irqsave(snic->shost->host_lock, flags); 308 308 list_del(&tgt->list); 309 309 spin_unlock_irqrestore(snic->shost->host_lock, flags); 310 - kfree(tgt); 310 + put_device(&tgt->dev); 311 311 tgt = NULL; 312 312 313 313 return tgt;
+13 -4
drivers/scsi/storvsc_drv.c
··· 316 316 #define SRB_STATUS_ABORTED 0x02 317 317 #define SRB_STATUS_ERROR 0x04 318 318 #define SRB_STATUS_INVALID_REQUEST 0x06 319 + #define SRB_STATUS_TIMEOUT 0x09 320 + #define SRB_STATUS_SELECTION_TIMEOUT 0x0A 321 + #define SRB_STATUS_BUS_RESET 0x0E 319 322 #define SRB_STATUS_DATA_OVERRUN 0x12 320 323 #define SRB_STATUS_INVALID_LUN 0x20 324 + #define SRB_STATUS_INTERNAL_ERROR 0x30 321 325 322 326 #define SRB_STATUS(status) \ 323 327 (status & ~(SRB_STATUS_AUTOSENSE_VALID | SRB_STATUS_QUEUE_FROZEN)) ··· 369 365 #define STORVSC_FC_MAX_LUNS_PER_TARGET 255 370 366 #define STORVSC_FC_MAX_TARGETS 128 371 367 #define STORVSC_FC_MAX_CHANNELS 8 368 + #define STORVSC_FC_MAX_XFER_SIZE ((u32)(512 * 1024)) 372 369 373 370 #define STORVSC_IDE_MAX_LUNS_PER_TARGET 64 374 371 #define STORVSC_IDE_MAX_TARGETS 1 ··· 983 978 case SRB_STATUS_ERROR: 984 979 case SRB_STATUS_ABORTED: 985 980 case SRB_STATUS_INVALID_REQUEST: 981 + case SRB_STATUS_INTERNAL_ERROR: 982 + case SRB_STATUS_TIMEOUT: 983 + case SRB_STATUS_SELECTION_TIMEOUT: 984 + case SRB_STATUS_BUS_RESET: 985 + case SRB_STATUS_DATA_OVERRUN: 986 986 if (vm_srb->srb_status & SRB_STATUS_AUTOSENSE_VALID) { 987 987 /* Check for capacity change */ 988 988 if ((asc == 0x2a) && (ascq == 0x9)) { ··· 1681 1671 */ 1682 1672 static enum scsi_timeout_action storvsc_eh_timed_out(struct scsi_cmnd *scmnd) 1683 1673 { 1684 - #if IS_ENABLED(CONFIG_SCSI_FC_ATTRS) 1685 - if (scmnd->device->host->transportt == fc_transport_template) 1686 - return fc_eh_timed_out(scmnd); 1687 - #endif 1688 1674 return SCSI_EH_RESET_TIMER; 1689 1675 } 1690 1676 ··· 2010 2004 * protecting it from any weird value. 2011 2005 */ 2012 2006 max_xfer_bytes = round_down(stor_device->max_transfer_bytes, HV_HYP_PAGE_SIZE); 2007 + if (is_fc) 2008 + max_xfer_bytes = min(max_xfer_bytes, STORVSC_FC_MAX_XFER_SIZE); 2009 + 2013 2010 /* max_hw_sectors_kb */ 2014 2011 host->max_sectors = max_xfer_bytes >> 9; 2015 2012 /*
+4 -2
drivers/ufs/core/ufs-mcq.c
··· 578 578 { 579 579 struct ufshcd_lrb *lrbp = &hba->lrb[task_tag]; 580 580 struct utp_transfer_req_desc *utrd; 581 - u32 mask = hwq->max_entries - 1; 582 581 __le64 cmd_desc_base_addr; 583 582 bool ret = false; 584 583 u64 addr, match; ··· 605 606 ret = true; 606 607 goto out; 607 608 } 608 - sq_head_slot = (sq_head_slot + 1) & mask; 609 + 610 + sq_head_slot++; 611 + if (sq_head_slot == hwq->max_entries) 612 + sq_head_slot = 0; 609 613 } 610 614 611 615 out:
+38
drivers/ufs/core/ufshcd.c
··· 8452 8452 return ret; 8453 8453 } 8454 8454 8455 + static void ufshcd_set_timestamp_attr(struct ufs_hba *hba) 8456 + { 8457 + int err; 8458 + struct ufs_query_req *request = NULL; 8459 + struct ufs_query_res *response = NULL; 8460 + struct ufs_dev_info *dev_info = &hba->dev_info; 8461 + struct utp_upiu_query_v4_0 *upiu_data; 8462 + 8463 + if (dev_info->wspecversion < 0x400) 8464 + return; 8465 + 8466 + ufshcd_hold(hba); 8467 + 8468 + mutex_lock(&hba->dev_cmd.lock); 8469 + 8470 + ufshcd_init_query(hba, &request, &response, 8471 + UPIU_QUERY_OPCODE_WRITE_ATTR, 8472 + QUERY_ATTR_IDN_TIMESTAMP, 0, 0); 8473 + 8474 + request->query_func = UPIU_QUERY_FUNC_STANDARD_WRITE_REQUEST; 8475 + 8476 + upiu_data = (struct utp_upiu_query_v4_0 *)&request->upiu_req; 8477 + 8478 + put_unaligned_be64(ktime_get_real_ns(), &upiu_data->osf3); 8479 + 8480 + err = ufshcd_exec_dev_cmd(hba, DEV_CMD_TYPE_QUERY, QUERY_REQ_TIMEOUT); 8481 + 8482 + if (err) 8483 + dev_err(hba->dev, "%s: failed to set timestamp %d\n", 8484 + __func__, err); 8485 + 8486 + mutex_unlock(&hba->dev_cmd.lock); 8487 + ufshcd_release(hba); 8488 + } 8489 + 8455 8490 /** 8456 8491 * ufshcd_add_lus - probe and add UFS logical units 8457 8492 * @hba: per-adapter instance ··· 8675 8640 /* UFS device is also active now */ 8676 8641 ufshcd_set_ufs_dev_active(hba); 8677 8642 ufshcd_force_reset_auto_bkops(hba); 8643 + 8644 + ufshcd_set_timestamp_attr(hba); 8678 8645 8679 8646 /* Gear up to HS gear if supported */ 8680 8647 if (hba->max_pwr_info.is_valid) { ··· 9714 9677 ret = ufshcd_set_dev_pwr_mode(hba, UFS_ACTIVE_PWR_MODE); 9715 9678 if (ret) 9716 9679 goto set_old_link_state; 9680 + ufshcd_set_timestamp_attr(hba); 9717 9681 } 9718 9682 9719 9683 if (ufshcd_keep_autobkops_enabled_except_suspend(hba))
+1
drivers/ufs/host/Kconfig
··· 72 72 config SCSI_UFS_MEDIATEK 73 73 tristate "Mediatek specific hooks to UFS controller platform driver" 74 74 depends on SCSI_UFSHCD_PLATFORM && ARCH_MEDIATEK 75 + depends on RESET_CONTROLLER 75 76 select PHY_MTK_UFS 76 77 select RESET_TI_SYSCON 77 78 help
+1 -1
drivers/ufs/host/ufs-qcom.c
··· 365 365 ufs_qcom_cap_qunipro(host) ? QUNIPRO_SEL : 0, 366 366 REG_UFS_CFG1); 367 367 368 - if (host->hw_ver.major == 0x05) 368 + if (host->hw_ver.major >= 0x05) 369 369 ufshcd_rmwl(host->hba, QUNIPRO_G4_SEL, 0, REG_UFS_CFG0); 370 370 371 371 /* make sure above configuration is applied before we return */
+1 -1
drivers/ufs/host/ufs-renesas.c
··· 359 359 { 360 360 struct ufs_renesas_priv *priv; 361 361 362 - priv = devm_kmalloc(hba->dev, sizeof(*priv), GFP_KERNEL); 362 + priv = devm_kzalloc(hba->dev, sizeof(*priv), GFP_KERNEL); 363 363 if (!priv) 364 364 return -ENOMEM; 365 365 ufshcd_set_variant(hba, priv);
-4
include/linux/raid_class.h
··· 77 77 78 78 struct raid_template *raid_class_attach(struct raid_function_template *); 79 79 void raid_class_release(struct raid_template *); 80 - 81 - int __must_check raid_component_add(struct raid_template *, struct device *, 82 - struct device *); 83 -
+25
include/uapi/scsi/scsi_bsg_ufs.h
··· 117 117 }; 118 118 119 119 /** 120 + * struct utp_upiu_query_v4_0 - upiu request buffer structure for 121 + * query request >= UFS 4.0 spec. 122 + * @opcode: command to perform B-0 123 + * @idn: a value that indicates the particular type of data B-1 124 + * @index: Index to further identify data B-2 125 + * @selector: Index to further identify data B-3 126 + * @osf4: spec field B-5 127 + * @osf5: spec field B 6,7 128 + * @osf6: spec field DW 8,9 129 + * @osf7: spec field DW 10,11 130 + */ 131 + struct utp_upiu_query_v4_0 { 132 + __u8 opcode; 133 + __u8 idn; 134 + __u8 index; 135 + __u8 selector; 136 + __u8 osf3; 137 + __u8 osf4; 138 + __be16 osf5; 139 + __be32 osf6; 140 + __be32 osf7; 141 + __be32 reserved; 142 + }; 143 + 144 + /** 120 145 * struct utp_upiu_cmd - Command UPIU structure 121 146 * @data_transfer_len: Data Transfer Length DW-3 122 147 * @cdb: Command Descriptor Block CDB DW-4 to DW-7
+1
include/ufs/ufs.h
··· 179 179 QUERY_ATTR_IDN_WB_BUFF_LIFE_TIME_EST = 0x1E, 180 180 QUERY_ATTR_IDN_CURR_WB_BUFF_SIZE = 0x1F, 181 181 QUERY_ATTR_IDN_EXT_IID_EN = 0x2A, 182 + QUERY_ATTR_IDN_TIMESTAMP = 0x30 182 183 }; 183 184 184 185 /* Descriptor idn for Query requests */