diff options
| -rw-r--r-- | drivers/s390/scsi/zfcp_aux.c | 5 | ||||
| -rw-r--r-- | drivers/s390/scsi/zfcp_erp.c | 18 | ||||
| -rw-r--r-- | drivers/s390/scsi/zfcp_scsi.c | 5 | ||||
| -rw-r--r-- | drivers/scsi/aacraid/comminit.c | 8 | ||||
| -rw-r--r-- | drivers/scsi/aacraid/linit.c | 7 | ||||
| -rw-r--r-- | drivers/scsi/hpsa.c | 2 | ||||
| -rw-r--r-- | drivers/scsi/qla2xxx/qla_os.c | 4 | ||||
| -rw-r--r-- | drivers/scsi/scsi_lib.c | 8 | ||||
| -rw-r--r-- | drivers/scsi/sg.c | 2 |
9 files changed, 37 insertions, 22 deletions
diff --git a/drivers/s390/scsi/zfcp_aux.c b/drivers/s390/scsi/zfcp_aux.c index 82ac331d9125..84752152d41f 100644 --- a/drivers/s390/scsi/zfcp_aux.c +++ b/drivers/s390/scsi/zfcp_aux.c | |||
| @@ -357,6 +357,8 @@ struct zfcp_adapter *zfcp_adapter_enqueue(struct ccw_device *ccw_device) | |||
| 357 | 357 | ||
| 358 | adapter->next_port_scan = jiffies; | 358 | adapter->next_port_scan = jiffies; |
| 359 | 359 | ||
| 360 | adapter->erp_action.adapter = adapter; | ||
| 361 | |||
| 360 | if (zfcp_qdio_setup(adapter)) | 362 | if (zfcp_qdio_setup(adapter)) |
| 361 | goto failed; | 363 | goto failed; |
| 362 | 364 | ||
| @@ -513,6 +515,9 @@ struct zfcp_port *zfcp_port_enqueue(struct zfcp_adapter *adapter, u64 wwpn, | |||
| 513 | port->dev.groups = zfcp_port_attr_groups; | 515 | port->dev.groups = zfcp_port_attr_groups; |
| 514 | port->dev.release = zfcp_port_release; | 516 | port->dev.release = zfcp_port_release; |
| 515 | 517 | ||
| 518 | port->erp_action.adapter = adapter; | ||
| 519 | port->erp_action.port = port; | ||
| 520 | |||
| 516 | if (dev_set_name(&port->dev, "0x%016llx", (unsigned long long)wwpn)) { | 521 | if (dev_set_name(&port->dev, "0x%016llx", (unsigned long long)wwpn)) { |
| 517 | kfree(port); | 522 | kfree(port); |
| 518 | goto err_out; | 523 | goto err_out; |
diff --git a/drivers/s390/scsi/zfcp_erp.c b/drivers/s390/scsi/zfcp_erp.c index 37408f5f81ce..ec2532ee1822 100644 --- a/drivers/s390/scsi/zfcp_erp.c +++ b/drivers/s390/scsi/zfcp_erp.c | |||
| @@ -193,9 +193,8 @@ static struct zfcp_erp_action *zfcp_erp_setup_act(int need, u32 act_status, | |||
| 193 | atomic_or(ZFCP_STATUS_COMMON_ERP_INUSE, | 193 | atomic_or(ZFCP_STATUS_COMMON_ERP_INUSE, |
| 194 | &zfcp_sdev->status); | 194 | &zfcp_sdev->status); |
| 195 | erp_action = &zfcp_sdev->erp_action; | 195 | erp_action = &zfcp_sdev->erp_action; |
| 196 | memset(erp_action, 0, sizeof(struct zfcp_erp_action)); | 196 | WARN_ON_ONCE(erp_action->port != port); |
| 197 | erp_action->port = port; | 197 | WARN_ON_ONCE(erp_action->sdev != sdev); |
| 198 | erp_action->sdev = sdev; | ||
| 199 | if (!(atomic_read(&zfcp_sdev->status) & | 198 | if (!(atomic_read(&zfcp_sdev->status) & |
| 200 | ZFCP_STATUS_COMMON_RUNNING)) | 199 | ZFCP_STATUS_COMMON_RUNNING)) |
| 201 | act_status |= ZFCP_STATUS_ERP_CLOSE_ONLY; | 200 | act_status |= ZFCP_STATUS_ERP_CLOSE_ONLY; |
| @@ -208,8 +207,8 @@ static struct zfcp_erp_action *zfcp_erp_setup_act(int need, u32 act_status, | |||
| 208 | zfcp_erp_action_dismiss_port(port); | 207 | zfcp_erp_action_dismiss_port(port); |
| 209 | atomic_or(ZFCP_STATUS_COMMON_ERP_INUSE, &port->status); | 208 | atomic_or(ZFCP_STATUS_COMMON_ERP_INUSE, &port->status); |
| 210 | erp_action = &port->erp_action; | 209 | erp_action = &port->erp_action; |
| 211 | memset(erp_action, 0, sizeof(struct zfcp_erp_action)); | 210 | WARN_ON_ONCE(erp_action->port != port); |
| 212 | erp_action->port = port; | 211 | WARN_ON_ONCE(erp_action->sdev != NULL); |
| 213 | if (!(atomic_read(&port->status) & ZFCP_STATUS_COMMON_RUNNING)) | 212 | if (!(atomic_read(&port->status) & ZFCP_STATUS_COMMON_RUNNING)) |
| 214 | act_status |= ZFCP_STATUS_ERP_CLOSE_ONLY; | 213 | act_status |= ZFCP_STATUS_ERP_CLOSE_ONLY; |
| 215 | break; | 214 | break; |
| @@ -219,7 +218,8 @@ static struct zfcp_erp_action *zfcp_erp_setup_act(int need, u32 act_status, | |||
| 219 | zfcp_erp_action_dismiss_adapter(adapter); | 218 | zfcp_erp_action_dismiss_adapter(adapter); |
| 220 | atomic_or(ZFCP_STATUS_COMMON_ERP_INUSE, &adapter->status); | 219 | atomic_or(ZFCP_STATUS_COMMON_ERP_INUSE, &adapter->status); |
| 221 | erp_action = &adapter->erp_action; | 220 | erp_action = &adapter->erp_action; |
| 222 | memset(erp_action, 0, sizeof(struct zfcp_erp_action)); | 221 | WARN_ON_ONCE(erp_action->port != NULL); |
| 222 | WARN_ON_ONCE(erp_action->sdev != NULL); | ||
| 223 | if (!(atomic_read(&adapter->status) & | 223 | if (!(atomic_read(&adapter->status) & |
| 224 | ZFCP_STATUS_COMMON_RUNNING)) | 224 | ZFCP_STATUS_COMMON_RUNNING)) |
| 225 | act_status |= ZFCP_STATUS_ERP_CLOSE_ONLY; | 225 | act_status |= ZFCP_STATUS_ERP_CLOSE_ONLY; |
| @@ -229,7 +229,11 @@ static struct zfcp_erp_action *zfcp_erp_setup_act(int need, u32 act_status, | |||
| 229 | return NULL; | 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 | erp_action->action = need; | 237 | erp_action->action = need; |
| 234 | erp_action->status = act_status; | 238 | erp_action->status = act_status; |
| 235 | 239 | ||
diff --git a/drivers/s390/scsi/zfcp_scsi.c b/drivers/s390/scsi/zfcp_scsi.c index ec3ddd1d31d5..6cf8732627e0 100644 --- a/drivers/s390/scsi/zfcp_scsi.c +++ b/drivers/s390/scsi/zfcp_scsi.c | |||
| @@ -115,10 +115,15 @@ static int zfcp_scsi_slave_alloc(struct scsi_device *sdev) | |||
| 115 | struct zfcp_unit *unit; | 115 | struct zfcp_unit *unit; |
| 116 | int npiv = adapter->connection_features & FSF_FEATURE_NPIV_MODE; | 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 | port = zfcp_get_port_by_wwpn(adapter, rport->port_name); | 121 | port = zfcp_get_port_by_wwpn(adapter, rport->port_name); |
| 119 | if (!port) | 122 | if (!port) |
| 120 | return -ENXIO; | 123 | return -ENXIO; |
| 121 | 124 | ||
| 125 | zfcp_sdev->erp_action.port = port; | ||
| 126 | |||
| 122 | unit = zfcp_unit_find(port, zfcp_scsi_dev_lun(sdev)); | 127 | unit = zfcp_unit_find(port, zfcp_scsi_dev_lun(sdev)); |
| 123 | if (unit) | 128 | if (unit) |
| 124 | put_device(&unit->dev); | 129 | put_device(&unit->dev); |
diff --git a/drivers/scsi/aacraid/comminit.c b/drivers/scsi/aacraid/comminit.c index 97d269f16888..1bc623ad3faf 100644 --- a/drivers/scsi/aacraid/comminit.c +++ b/drivers/scsi/aacraid/comminit.c | |||
| @@ -302,9 +302,11 @@ int aac_send_shutdown(struct aac_dev * dev) | |||
| 302 | return -ENOMEM; | 302 | return -ENOMEM; |
| 303 | aac_fib_init(fibctx); | 303 | aac_fib_init(fibctx); |
| 304 | 304 | ||
| 305 | mutex_lock(&dev->ioctl_mutex); | 305 | if (!dev->adapter_shutdown) { |
| 306 | dev->adapter_shutdown = 1; | 306 | mutex_lock(&dev->ioctl_mutex); |
| 307 | mutex_unlock(&dev->ioctl_mutex); | 307 | dev->adapter_shutdown = 1; |
| 308 | mutex_unlock(&dev->ioctl_mutex); | ||
| 309 | } | ||
| 308 | 310 | ||
| 309 | cmd = (struct aac_close *) fib_data(fibctx); | 311 | cmd = (struct aac_close *) fib_data(fibctx); |
| 310 | cmd->command = cpu_to_le32(VM_CloseAll); | 312 | cmd->command = cpu_to_le32(VM_CloseAll); |
diff --git a/drivers/scsi/aacraid/linit.c b/drivers/scsi/aacraid/linit.c index 62beb2596466..c9252b138c1f 100644 --- a/drivers/scsi/aacraid/linit.c +++ b/drivers/scsi/aacraid/linit.c | |||
| @@ -1551,8 +1551,9 @@ static void __aac_shutdown(struct aac_dev * aac) | |||
| 1551 | { | 1551 | { |
| 1552 | int i; | 1552 | int i; |
| 1553 | 1553 | ||
| 1554 | mutex_lock(&aac->ioctl_mutex); | ||
| 1554 | aac->adapter_shutdown = 1; | 1555 | aac->adapter_shutdown = 1; |
| 1555 | aac_send_shutdown(aac); | 1556 | mutex_unlock(&aac->ioctl_mutex); |
| 1556 | 1557 | ||
| 1557 | if (aac->aif_thread) { | 1558 | if (aac->aif_thread) { |
| 1558 | int i; | 1559 | int i; |
| @@ -1565,7 +1566,11 @@ static void __aac_shutdown(struct aac_dev * aac) | |||
| 1565 | } | 1566 | } |
| 1566 | kthread_stop(aac->thread); | 1567 | kthread_stop(aac->thread); |
| 1567 | } | 1568 | } |
| 1569 | |||
| 1570 | aac_send_shutdown(aac); | ||
| 1571 | |||
| 1568 | aac_adapter_disable_int(aac); | 1572 | aac_adapter_disable_int(aac); |
| 1573 | |||
| 1569 | if (aac_is_src(aac)) { | 1574 | if (aac_is_src(aac)) { |
| 1570 | if (aac->max_msix > 1) { | 1575 | if (aac->max_msix > 1) { |
| 1571 | for (i = 0; i < aac->max_msix; i++) { | 1576 | for (i = 0; i < aac->max_msix; i++) { |
diff --git a/drivers/scsi/hpsa.c b/drivers/scsi/hpsa.c index 9abe81021484..4ed3d26ffdde 100644 --- a/drivers/scsi/hpsa.c +++ b/drivers/scsi/hpsa.c | |||
| @@ -4091,7 +4091,7 @@ static int hpsa_set_local_logical_count(struct ctlr_info *h, | |||
| 4091 | memset(id_ctlr, 0, sizeof(*id_ctlr)); | 4091 | memset(id_ctlr, 0, sizeof(*id_ctlr)); |
| 4092 | rc = hpsa_bmic_id_controller(h, id_ctlr, sizeof(*id_ctlr)); | 4092 | rc = hpsa_bmic_id_controller(h, id_ctlr, sizeof(*id_ctlr)); |
| 4093 | if (!rc) | 4093 | if (!rc) |
| 4094 | if (id_ctlr->configured_logical_drive_count < 256) | 4094 | if (id_ctlr->configured_logical_drive_count < 255) |
| 4095 | *nlocals = id_ctlr->configured_logical_drive_count; | 4095 | *nlocals = id_ctlr->configured_logical_drive_count; |
| 4096 | else | 4096 | else |
| 4097 | *nlocals = le16_to_cpu( | 4097 | *nlocals = le16_to_cpu( |
diff --git a/drivers/scsi/qla2xxx/qla_os.c b/drivers/scsi/qla2xxx/qla_os.c index 937209805baf..3bd956d3bc5d 100644 --- a/drivers/scsi/qla2xxx/qla_os.c +++ b/drivers/scsi/qla2xxx/qla_os.c | |||
| @@ -3061,6 +3061,8 @@ qla2x00_probe_one(struct pci_dev *pdev, const struct pci_device_id *id) | |||
| 3061 | host->max_cmd_len, host->max_channel, host->max_lun, | 3061 | host->max_cmd_len, host->max_channel, host->max_lun, |
| 3062 | host->transportt, sht->vendor_id); | 3062 | host->transportt, sht->vendor_id); |
| 3063 | 3063 | ||
| 3064 | INIT_WORK(&base_vha->iocb_work, qla2x00_iocb_work_fn); | ||
| 3065 | |||
| 3064 | /* Set up the irqs */ | 3066 | /* Set up the irqs */ |
| 3065 | ret = qla2x00_request_irqs(ha, rsp); | 3067 | ret = qla2x00_request_irqs(ha, rsp); |
| 3066 | if (ret) | 3068 | if (ret) |
| @@ -3175,8 +3177,6 @@ qla2x00_probe_one(struct pci_dev *pdev, const struct pci_device_id *id) | |||
| 3175 | host->can_queue, base_vha->req, | 3177 | host->can_queue, base_vha->req, |
| 3176 | base_vha->mgmt_svr_loop_id, host->sg_tablesize); | 3178 | base_vha->mgmt_svr_loop_id, host->sg_tablesize); |
| 3177 | 3179 | ||
| 3178 | INIT_WORK(&base_vha->iocb_work, qla2x00_iocb_work_fn); | ||
| 3179 | |||
| 3180 | if (ha->mqenable) { | 3180 | if (ha->mqenable) { |
| 3181 | bool mq = false; | 3181 | bool mq = false; |
| 3182 | bool startit = false; | 3182 | bool startit = false; |
diff --git a/drivers/scsi/scsi_lib.c b/drivers/scsi/scsi_lib.c index 9cf6a80fe297..ad3ea24f0885 100644 --- a/drivers/scsi/scsi_lib.c +++ b/drivers/scsi/scsi_lib.c | |||
| @@ -1379,8 +1379,6 @@ static int scsi_prep_fn(struct request_queue *q, struct request *req) | |||
| 1379 | 1379 | ||
| 1380 | ret = scsi_setup_cmnd(sdev, req); | 1380 | ret = scsi_setup_cmnd(sdev, req); |
| 1381 | out: | 1381 | out: |
| 1382 | if (ret != BLKPREP_OK) | ||
| 1383 | cmd->flags &= ~SCMD_INITIALIZED; | ||
| 1384 | return scsi_prep_return(q, req, ret); | 1382 | return scsi_prep_return(q, req, ret); |
| 1385 | } | 1383 | } |
| 1386 | 1384 | ||
| @@ -1900,7 +1898,6 @@ static int scsi_mq_prep_fn(struct request *req) | |||
| 1900 | struct scsi_device *sdev = req->q->queuedata; | 1898 | struct scsi_device *sdev = req->q->queuedata; |
| 1901 | struct Scsi_Host *shost = sdev->host; | 1899 | struct Scsi_Host *shost = sdev->host; |
| 1902 | struct scatterlist *sg; | 1900 | struct scatterlist *sg; |
| 1903 | int ret; | ||
| 1904 | 1901 | ||
| 1905 | scsi_init_command(sdev, cmd); | 1902 | scsi_init_command(sdev, cmd); |
| 1906 | 1903 | ||
| @@ -1934,10 +1931,7 @@ static int scsi_mq_prep_fn(struct request *req) | |||
| 1934 | 1931 | ||
| 1935 | blk_mq_start_request(req); | 1932 | blk_mq_start_request(req); |
| 1936 | 1933 | ||
| 1937 | ret = scsi_setup_cmnd(sdev, req); | 1934 | return scsi_setup_cmnd(sdev, req); |
| 1938 | if (ret != BLK_STS_OK) | ||
| 1939 | cmd->flags &= ~SCMD_INITIALIZED; | ||
| 1940 | return ret; | ||
| 1941 | } | 1935 | } |
| 1942 | 1936 | ||
| 1943 | static void scsi_mq_done(struct scsi_cmnd *cmd) | 1937 | static void scsi_mq_done(struct scsi_cmnd *cmd) |
diff --git a/drivers/scsi/sg.c b/drivers/scsi/sg.c index 0419c2298eab..aa28874e8fb9 100644 --- a/drivers/scsi/sg.c +++ b/drivers/scsi/sg.c | |||
| @@ -837,7 +837,7 @@ sg_fill_request_table(Sg_fd *sfp, sg_req_info_t *rinfo) | |||
| 837 | 837 | ||
| 838 | val = 0; | 838 | val = 0; |
| 839 | list_for_each_entry(srp, &sfp->rq_list, entry) { | 839 | list_for_each_entry(srp, &sfp->rq_list, entry) { |
| 840 | if (val > SG_MAX_QUEUE) | 840 | if (val >= SG_MAX_QUEUE) |
| 841 | break; | 841 | break; |
| 842 | rinfo[val].req_state = srp->done + 1; | 842 | rinfo[val].req_state = srp->done + 1; |
| 843 | rinfo[val].problem = | 843 | rinfo[val].problem = |
