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

Configure Feed

Select the types of activity you want to include in your feed.

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

Pull SCSI fixes from James Bottomley:
"Six fixes for mostly minor issues, most of which have small race
windows for occurring"

* tag 'scsi-fixes' of git://git.kernel.org/pub/scm/linux/kernel/git/jejb/scsi:
scsi: Suppress a kernel warning in case the prep function returns BLKPREP_DEFER
scsi: sg: Re-fix off by one in sg_fill_request_table()
scsi: aacraid: Fix controller initialization failure
scsi: hpsa: Fix configured_logical_drive_count·check
scsi: qla2xxx: Initialize Work element before requesting IRQs
scsi: zfcp: fix erp_action use-before-initialize in REC action trace

+37 -22
+5
drivers/s390/scsi/zfcp_aux.c
··· 357 357 358 358 adapter->next_port_scan = jiffies; 359 359 360 + adapter->erp_action.adapter = adapter; 361 + 360 362 if (zfcp_qdio_setup(adapter)) 361 363 goto failed; 362 364 ··· 514 512 port->dev.parent = &adapter->ccw_device->dev; 515 513 port->dev.groups = zfcp_port_attr_groups; 516 514 port->dev.release = zfcp_port_release; 515 + 516 + port->erp_action.adapter = adapter; 517 + port->erp_action.port = port; 517 518 518 519 if (dev_set_name(&port->dev, "0x%016llx", (unsigned long long)wwpn)) { 519 520 kfree(port);
+11 -7
drivers/s390/scsi/zfcp_erp.c
··· 193 193 atomic_or(ZFCP_STATUS_COMMON_ERP_INUSE, 194 194 &zfcp_sdev->status); 195 195 erp_action = &zfcp_sdev->erp_action; 196 - memset(erp_action, 0, sizeof(struct zfcp_erp_action)); 197 - erp_action->port = port; 198 - erp_action->sdev = sdev; 196 + WARN_ON_ONCE(erp_action->port != port); 197 + WARN_ON_ONCE(erp_action->sdev != sdev); 199 198 if (!(atomic_read(&zfcp_sdev->status) & 200 199 ZFCP_STATUS_COMMON_RUNNING)) 201 200 act_status |= ZFCP_STATUS_ERP_CLOSE_ONLY; ··· 207 208 zfcp_erp_action_dismiss_port(port); 208 209 atomic_or(ZFCP_STATUS_COMMON_ERP_INUSE, &port->status); 209 210 erp_action = &port->erp_action; 210 - memset(erp_action, 0, sizeof(struct zfcp_erp_action)); 211 - erp_action->port = port; 211 + WARN_ON_ONCE(erp_action->port != port); 212 + WARN_ON_ONCE(erp_action->sdev != NULL); 212 213 if (!(atomic_read(&port->status) & ZFCP_STATUS_COMMON_RUNNING)) 213 214 act_status |= ZFCP_STATUS_ERP_CLOSE_ONLY; 214 215 break; ··· 218 219 zfcp_erp_action_dismiss_adapter(adapter); 219 220 atomic_or(ZFCP_STATUS_COMMON_ERP_INUSE, &adapter->status); 220 221 erp_action = &adapter->erp_action; 221 - memset(erp_action, 0, sizeof(struct zfcp_erp_action)); 222 + WARN_ON_ONCE(erp_action->port != NULL); 223 + WARN_ON_ONCE(erp_action->sdev != NULL); 222 224 if (!(atomic_read(&adapter->status) & 223 225 ZFCP_STATUS_COMMON_RUNNING)) 224 226 act_status |= ZFCP_STATUS_ERP_CLOSE_ONLY; ··· 229 229 return NULL; 230 230 } 231 231 232 - erp_action->adapter = adapter; 232 + WARN_ON_ONCE(erp_action->adapter != adapter); 233 + memset(&erp_action->list, 0, sizeof(erp_action->list)); 234 + memset(&erp_action->timer, 0, sizeof(erp_action->timer)); 235 + erp_action->step = ZFCP_ERP_STEP_UNINITIALIZED; 236 + erp_action->fsf_req_id = 0; 233 237 erp_action->action = need; 234 238 erp_action->status = act_status; 235 239
+5
drivers/s390/scsi/zfcp_scsi.c
··· 115 115 struct zfcp_unit *unit; 116 116 int npiv = adapter->connection_features & FSF_FEATURE_NPIV_MODE; 117 117 118 + zfcp_sdev->erp_action.adapter = adapter; 119 + zfcp_sdev->erp_action.sdev = sdev; 120 + 118 121 port = zfcp_get_port_by_wwpn(adapter, rport->port_name); 119 122 if (!port) 120 123 return -ENXIO; 124 + 125 + zfcp_sdev->erp_action.port = port; 121 126 122 127 unit = zfcp_unit_find(port, zfcp_scsi_dev_lun(sdev)); 123 128 if (unit)
+5 -3
drivers/scsi/aacraid/comminit.c
··· 302 302 return -ENOMEM; 303 303 aac_fib_init(fibctx); 304 304 305 - mutex_lock(&dev->ioctl_mutex); 306 - dev->adapter_shutdown = 1; 307 - mutex_unlock(&dev->ioctl_mutex); 305 + if (!dev->adapter_shutdown) { 306 + mutex_lock(&dev->ioctl_mutex); 307 + dev->adapter_shutdown = 1; 308 + mutex_unlock(&dev->ioctl_mutex); 309 + } 308 310 309 311 cmd = (struct aac_close *) fib_data(fibctx); 310 312 cmd->command = cpu_to_le32(VM_CloseAll);
+6 -1
drivers/scsi/aacraid/linit.c
··· 1551 1551 { 1552 1552 int i; 1553 1553 1554 + mutex_lock(&aac->ioctl_mutex); 1554 1555 aac->adapter_shutdown = 1; 1555 - aac_send_shutdown(aac); 1556 + mutex_unlock(&aac->ioctl_mutex); 1556 1557 1557 1558 if (aac->aif_thread) { 1558 1559 int i; ··· 1566 1565 } 1567 1566 kthread_stop(aac->thread); 1568 1567 } 1568 + 1569 + aac_send_shutdown(aac); 1570 + 1569 1571 aac_adapter_disable_int(aac); 1572 + 1570 1573 if (aac_is_src(aac)) { 1571 1574 if (aac->max_msix > 1) { 1572 1575 for (i = 0; i < aac->max_msix; i++) {
+1 -1
drivers/scsi/hpsa.c
··· 4091 4091 memset(id_ctlr, 0, sizeof(*id_ctlr)); 4092 4092 rc = hpsa_bmic_id_controller(h, id_ctlr, sizeof(*id_ctlr)); 4093 4093 if (!rc) 4094 - if (id_ctlr->configured_logical_drive_count < 256) 4094 + if (id_ctlr->configured_logical_drive_count < 255) 4095 4095 *nlocals = id_ctlr->configured_logical_drive_count; 4096 4096 else 4097 4097 *nlocals = le16_to_cpu(
+2 -2
drivers/scsi/qla2xxx/qla_os.c
··· 3061 3061 host->max_cmd_len, host->max_channel, host->max_lun, 3062 3062 host->transportt, sht->vendor_id); 3063 3063 3064 + INIT_WORK(&base_vha->iocb_work, qla2x00_iocb_work_fn); 3065 + 3064 3066 /* Set up the irqs */ 3065 3067 ret = qla2x00_request_irqs(ha, rsp); 3066 3068 if (ret) ··· 3176 3174 "can_queue=%d, req=%p, mgmt_svr_loop_id=%d, sg_tablesize=%d.\n", 3177 3175 host->can_queue, base_vha->req, 3178 3176 base_vha->mgmt_svr_loop_id, host->sg_tablesize); 3179 - 3180 - INIT_WORK(&base_vha->iocb_work, qla2x00_iocb_work_fn); 3181 3177 3182 3178 if (ha->mqenable) { 3183 3179 bool mq = false;
+1 -7
drivers/scsi/scsi_lib.c
··· 1379 1379 1380 1380 ret = scsi_setup_cmnd(sdev, req); 1381 1381 out: 1382 - if (ret != BLKPREP_OK) 1383 - cmd->flags &= ~SCMD_INITIALIZED; 1384 1382 return scsi_prep_return(q, req, ret); 1385 1383 } 1386 1384 ··· 1898 1900 struct scsi_device *sdev = req->q->queuedata; 1899 1901 struct Scsi_Host *shost = sdev->host; 1900 1902 struct scatterlist *sg; 1901 - int ret; 1902 1903 1903 1904 scsi_init_command(sdev, cmd); 1904 1905 ··· 1931 1934 1932 1935 blk_mq_start_request(req); 1933 1936 1934 - ret = scsi_setup_cmnd(sdev, req); 1935 - if (ret != BLK_STS_OK) 1936 - cmd->flags &= ~SCMD_INITIALIZED; 1937 - return ret; 1937 + return scsi_setup_cmnd(sdev, req); 1938 1938 } 1939 1939 1940 1940 static void scsi_mq_done(struct scsi_cmnd *cmd)
+1 -1
drivers/scsi/sg.c
··· 837 837 838 838 val = 0; 839 839 list_for_each_entry(srp, &sfp->rq_list, entry) { 840 - if (val > SG_MAX_QUEUE) 840 + if (val >= SG_MAX_QUEUE) 841 841 break; 842 842 rinfo[val].req_state = srp->done + 1; 843 843 rinfo[val].problem =