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

Merge tag 'scsi-fixes' of git://git.kernel.org/pub/scm/linux/kernel/git/jejb/scsi

Pull SCSI fixes from James Bottomley:
"Four fixes, all in drivers.

Three are small and obvious, the qedi one is a bit larger but also
pretty obvious"

* tag 'scsi-fixes' of git://git.kernel.org/pub/scm/linux/kernel/git/jejb/scsi:
scsi: qla2xxx: Format log strings only if needed
scsi: scsi_debug: Fix buffer size of REPORT ZONES command
scsi: qedi: Fix cmd_cleanup_cmpl counter mismatch issue
scsi: pm80xx: Do not call scsi_remove_host() in pm8001_alloc()

+23 -29
+2 -4
drivers/scsi/pm8001/pm8001_init.c
··· 282 282 if (rc) { 283 283 pm8001_dbg(pm8001_ha, FAIL, 284 284 "pm8001_setup_irq failed [ret: %d]\n", rc); 285 - goto err_out_shost; 285 + goto err_out; 286 286 } 287 287 /* Request Interrupt */ 288 288 rc = pm8001_request_irq(pm8001_ha); 289 289 if (rc) 290 - goto err_out_shost; 290 + goto err_out; 291 291 292 292 count = pm8001_ha->max_q_num; 293 293 /* Queues are chosen based on the number of cores/msix availability */ ··· 423 423 pm8001_tag_init(pm8001_ha); 424 424 return 0; 425 425 426 - err_out_shost: 427 - scsi_remove_host(pm8001_ha->shost); 428 426 err_out_nodev: 429 427 for (i = 0; i < pm8001_ha->max_memcnt; i++) { 430 428 if (pm8001_ha->memoryMap.region[i].virt_ptr != NULL) {
+15 -22
drivers/scsi/qedi/qedi_fw.c
··· 732 732 { 733 733 struct qedi_work_map *work, *work_tmp; 734 734 u32 proto_itt = cqe->itid; 735 - itt_t protoitt = 0; 736 735 int found = 0; 737 736 struct qedi_cmd *qedi_cmd = NULL; 738 737 u32 iscsi_cid; ··· 811 812 return; 812 813 813 814 check_cleanup_reqs: 814 - if (qedi_conn->cmd_cleanup_req > 0) { 815 - QEDI_INFO(&qedi->dbg_ctx, QEDI_LOG_TID, 815 + if (atomic_inc_return(&qedi_conn->cmd_cleanup_cmpl) == 816 + qedi_conn->cmd_cleanup_req) { 817 + QEDI_INFO(&qedi->dbg_ctx, QEDI_LOG_SCSI_TM, 816 818 "Freeing tid=0x%x for cid=0x%x\n", 817 819 cqe->itid, qedi_conn->iscsi_conn_id); 818 - qedi_conn->cmd_cleanup_cmpl++; 819 820 wake_up(&qedi_conn->wait_queue); 820 - } else { 821 - QEDI_ERR(&qedi->dbg_ctx, 822 - "Delayed or untracked cleanup response, itt=0x%x, tid=0x%x, cid=0x%x\n", 823 - protoitt, cqe->itid, qedi_conn->iscsi_conn_id); 824 821 } 825 822 } 826 823 ··· 1158 1163 } 1159 1164 1160 1165 qedi_conn->cmd_cleanup_req = 0; 1161 - qedi_conn->cmd_cleanup_cmpl = 0; 1166 + atomic_set(&qedi_conn->cmd_cleanup_cmpl, 0); 1162 1167 1163 1168 QEDI_INFO(&qedi->dbg_ctx, QEDI_LOG_SCSI_TM, 1164 1169 "active_cmd_count=%d, cid=0x%x, in_recovery=%d, lun_reset=%d\n", ··· 1210 1215 qedi_conn->iscsi_conn_id); 1211 1216 1212 1217 rval = wait_event_interruptible_timeout(qedi_conn->wait_queue, 1213 - ((qedi_conn->cmd_cleanup_req == 1214 - qedi_conn->cmd_cleanup_cmpl) || 1215 - test_bit(QEDI_IN_RECOVERY, 1216 - &qedi->flags)), 1217 - 5 * HZ); 1218 + (qedi_conn->cmd_cleanup_req == 1219 + atomic_read(&qedi_conn->cmd_cleanup_cmpl)) || 1220 + test_bit(QEDI_IN_RECOVERY, &qedi->flags), 1221 + 5 * HZ); 1218 1222 if (rval) { 1219 1223 QEDI_INFO(&qedi->dbg_ctx, QEDI_LOG_SCSI_TM, 1220 1224 "i/o cmd_cleanup_req=%d, equal to cmd_cleanup_cmpl=%d, cid=0x%x\n", 1221 1225 qedi_conn->cmd_cleanup_req, 1222 - qedi_conn->cmd_cleanup_cmpl, 1226 + atomic_read(&qedi_conn->cmd_cleanup_cmpl), 1223 1227 qedi_conn->iscsi_conn_id); 1224 1228 1225 1229 return 0; ··· 1227 1233 QEDI_INFO(&qedi->dbg_ctx, QEDI_LOG_SCSI_TM, 1228 1234 "i/o cmd_cleanup_req=%d, not equal to cmd_cleanup_cmpl=%d, cid=0x%x\n", 1229 1235 qedi_conn->cmd_cleanup_req, 1230 - qedi_conn->cmd_cleanup_cmpl, 1236 + atomic_read(&qedi_conn->cmd_cleanup_cmpl), 1231 1237 qedi_conn->iscsi_conn_id); 1232 1238 1233 1239 iscsi_host_for_each_session(qedi->shost, ··· 1236 1242 1237 1243 /* Enable IOs for all other sessions except current.*/ 1238 1244 if (!wait_event_interruptible_timeout(qedi_conn->wait_queue, 1239 - (qedi_conn->cmd_cleanup_req == 1240 - qedi_conn->cmd_cleanup_cmpl) || 1241 - test_bit(QEDI_IN_RECOVERY, 1242 - &qedi->flags), 1243 - 5 * HZ)) { 1245 + (qedi_conn->cmd_cleanup_req == 1246 + atomic_read(&qedi_conn->cmd_cleanup_cmpl)) || 1247 + test_bit(QEDI_IN_RECOVERY, &qedi->flags), 1248 + 5 * HZ)) { 1244 1249 iscsi_host_for_each_session(qedi->shost, 1245 1250 qedi_mark_device_available); 1246 1251 return -1; ··· 1259 1266 1260 1267 qedi_ep = qedi_conn->ep; 1261 1268 qedi_conn->cmd_cleanup_req = 0; 1262 - qedi_conn->cmd_cleanup_cmpl = 0; 1269 + atomic_set(&qedi_conn->cmd_cleanup_cmpl, 0); 1263 1270 1264 1271 if (!qedi_ep) { 1265 1272 QEDI_WARN(&qedi->dbg_ctx,
+1 -1
drivers/scsi/qedi/qedi_iscsi.c
··· 412 412 qedi_conn->iscsi_conn_id = qedi_ep->iscsi_cid; 413 413 qedi_conn->fw_cid = qedi_ep->fw_cid; 414 414 qedi_conn->cmd_cleanup_req = 0; 415 - qedi_conn->cmd_cleanup_cmpl = 0; 415 + atomic_set(&qedi_conn->cmd_cleanup_cmpl, 0); 416 416 417 417 if (qedi_bind_conn_to_iscsi_cid(qedi, qedi_conn)) { 418 418 rc = -EINVAL;
+1 -1
drivers/scsi/qedi/qedi_iscsi.h
··· 155 155 spinlock_t list_lock; /* internal conn lock */ 156 156 u32 active_cmd_count; 157 157 u32 cmd_cleanup_req; 158 - u32 cmd_cleanup_cmpl; 158 + atomic_t cmd_cleanup_cmpl; 159 159 160 160 u32 iscsi_conn_id; 161 161 int itt;
+3
drivers/scsi/qla2xxx/qla_dbg.c
··· 2491 2491 struct va_format vaf; 2492 2492 char pbuf[64]; 2493 2493 2494 + if (!ql_mask_match(level) && !trace_ql_dbg_log_enabled()) 2495 + return; 2496 + 2494 2497 va_start(va, fmt); 2495 2498 2496 2499 vaf.fmt = fmt;
+1 -1
drivers/scsi/scsi_debug.c
··· 4342 4342 rep_max_zones = min((alloc_len - 64) >> ilog2(RZONES_DESC_HD), 4343 4343 max_zones); 4344 4344 4345 - arr = kcalloc(RZONES_DESC_HD, alloc_len, GFP_ATOMIC); 4345 + arr = kzalloc(alloc_len, GFP_ATOMIC); 4346 4346 if (!arr) { 4347 4347 mk_sense_buffer(scp, ILLEGAL_REQUEST, INSUFF_RES_ASC, 4348 4348 INSUFF_RES_ASCQ);