diff options
| -rw-r--r-- | drivers/scsi/cxgbi/libcxgbi.c | 3 | ||||
| -rw-r--r-- | drivers/scsi/device_handler/scsi_dh_alua.c | 5 | ||||
| -rw-r--r-- | drivers/scsi/megaraid/megaraid_sas.h | 2 | ||||
| -rw-r--r-- | drivers/scsi/mpt3sas/mpt3sas_scsih.c | 4 | ||||
| -rw-r--r-- | drivers/scsi/qla2xxx/qla_os.c | 16 | ||||
| -rw-r--r-- | drivers/scsi/vmw_pvscsi.c | 5 | ||||
| -rw-r--r-- | drivers/scsi/vmw_pvscsi.h | 2 |
7 files changed, 29 insertions, 8 deletions
diff --git a/drivers/scsi/cxgbi/libcxgbi.c b/drivers/scsi/cxgbi/libcxgbi.c index d1421139e6ea..2ffe029ff2b6 100644 --- a/drivers/scsi/cxgbi/libcxgbi.c +++ b/drivers/scsi/cxgbi/libcxgbi.c | |||
| @@ -2081,9 +2081,10 @@ void cxgbi_cleanup_task(struct iscsi_task *task) | |||
| 2081 | /* never reached the xmit task callout */ | 2081 | /* never reached the xmit task callout */ |
| 2082 | if (tdata->skb) | 2082 | if (tdata->skb) |
| 2083 | __kfree_skb(tdata->skb); | 2083 | __kfree_skb(tdata->skb); |
| 2084 | memset(tdata, 0, sizeof(*tdata)); | ||
| 2085 | 2084 | ||
| 2086 | task_release_itt(task, task->hdr_itt); | 2085 | task_release_itt(task, task->hdr_itt); |
| 2086 | memset(tdata, 0, sizeof(*tdata)); | ||
| 2087 | |||
| 2087 | iscsi_tcp_cleanup_task(task); | 2088 | iscsi_tcp_cleanup_task(task); |
| 2088 | } | 2089 | } |
| 2089 | EXPORT_SYMBOL_GPL(cxgbi_cleanup_task); | 2090 | EXPORT_SYMBOL_GPL(cxgbi_cleanup_task); |
diff --git a/drivers/scsi/device_handler/scsi_dh_alua.c b/drivers/scsi/device_handler/scsi_dh_alua.c index 241829e59668..7bb20684e9fa 100644 --- a/drivers/scsi/device_handler/scsi_dh_alua.c +++ b/drivers/scsi/device_handler/scsi_dh_alua.c | |||
| @@ -793,6 +793,7 @@ static void alua_rtpg_work(struct work_struct *work) | |||
| 793 | WARN_ON(pg->flags & ALUA_PG_RUN_RTPG); | 793 | WARN_ON(pg->flags & ALUA_PG_RUN_RTPG); |
| 794 | WARN_ON(pg->flags & ALUA_PG_RUN_STPG); | 794 | WARN_ON(pg->flags & ALUA_PG_RUN_STPG); |
| 795 | spin_unlock_irqrestore(&pg->lock, flags); | 795 | spin_unlock_irqrestore(&pg->lock, flags); |
| 796 | kref_put(&pg->kref, release_port_group); | ||
| 796 | return; | 797 | return; |
| 797 | } | 798 | } |
| 798 | if (pg->flags & ALUA_SYNC_STPG) | 799 | if (pg->flags & ALUA_SYNC_STPG) |
| @@ -890,6 +891,7 @@ static void alua_rtpg_queue(struct alua_port_group *pg, | |||
| 890 | /* Do not queue if the worker is already running */ | 891 | /* Do not queue if the worker is already running */ |
| 891 | if (!(pg->flags & ALUA_PG_RUNNING)) { | 892 | if (!(pg->flags & ALUA_PG_RUNNING)) { |
| 892 | kref_get(&pg->kref); | 893 | kref_get(&pg->kref); |
| 894 | sdev = NULL; | ||
| 893 | start_queue = 1; | 895 | start_queue = 1; |
| 894 | } | 896 | } |
| 895 | } | 897 | } |
| @@ -901,7 +903,8 @@ static void alua_rtpg_queue(struct alua_port_group *pg, | |||
| 901 | if (start_queue && | 903 | if (start_queue && |
| 902 | !queue_delayed_work(alua_wq, &pg->rtpg_work, | 904 | !queue_delayed_work(alua_wq, &pg->rtpg_work, |
| 903 | msecs_to_jiffies(ALUA_RTPG_DELAY_MSECS))) { | 905 | msecs_to_jiffies(ALUA_RTPG_DELAY_MSECS))) { |
| 904 | scsi_device_put(sdev); | 906 | if (sdev) |
| 907 | scsi_device_put(sdev); | ||
| 905 | kref_put(&pg->kref, release_port_group); | 908 | kref_put(&pg->kref, release_port_group); |
| 906 | } | 909 | } |
| 907 | } | 910 | } |
diff --git a/drivers/scsi/megaraid/megaraid_sas.h b/drivers/scsi/megaraid/megaraid_sas.h index ca86c885dfaa..3aaea713bf37 100644 --- a/drivers/scsi/megaraid/megaraid_sas.h +++ b/drivers/scsi/megaraid/megaraid_sas.h | |||
| @@ -2233,7 +2233,7 @@ struct megasas_instance_template { | |||
| 2233 | }; | 2233 | }; |
| 2234 | 2234 | ||
| 2235 | #define MEGASAS_IS_LOGICAL(scp) \ | 2235 | #define MEGASAS_IS_LOGICAL(scp) \ |
| 2236 | (scp->device->channel < MEGASAS_MAX_PD_CHANNELS) ? 0 : 1 | 2236 | ((scp->device->channel < MEGASAS_MAX_PD_CHANNELS) ? 0 : 1) |
| 2237 | 2237 | ||
| 2238 | #define MEGASAS_DEV_INDEX(scp) \ | 2238 | #define MEGASAS_DEV_INDEX(scp) \ |
| 2239 | (((scp->device->channel % 2) * MEGASAS_MAX_DEV_PER_CHANNEL) + \ | 2239 | (((scp->device->channel % 2) * MEGASAS_MAX_DEV_PER_CHANNEL) + \ |
diff --git a/drivers/scsi/mpt3sas/mpt3sas_scsih.c b/drivers/scsi/mpt3sas/mpt3sas_scsih.c index 209a969a979d..8aa769a2d919 100644 --- a/drivers/scsi/mpt3sas/mpt3sas_scsih.c +++ b/drivers/scsi/mpt3sas/mpt3sas_scsih.c | |||
| @@ -1273,9 +1273,9 @@ scsih_target_alloc(struct scsi_target *starget) | |||
| 1273 | sas_target_priv_data->handle = raid_device->handle; | 1273 | sas_target_priv_data->handle = raid_device->handle; |
| 1274 | sas_target_priv_data->sas_address = raid_device->wwid; | 1274 | sas_target_priv_data->sas_address = raid_device->wwid; |
| 1275 | sas_target_priv_data->flags |= MPT_TARGET_FLAGS_VOLUME; | 1275 | sas_target_priv_data->flags |= MPT_TARGET_FLAGS_VOLUME; |
| 1276 | sas_target_priv_data->raid_device = raid_device; | ||
| 1277 | if (ioc->is_warpdrive) | 1276 | if (ioc->is_warpdrive) |
| 1278 | raid_device->starget = starget; | 1277 | sas_target_priv_data->raid_device = raid_device; |
| 1278 | raid_device->starget = starget; | ||
| 1279 | } | 1279 | } |
| 1280 | spin_unlock_irqrestore(&ioc->raid_device_lock, flags); | 1280 | spin_unlock_irqrestore(&ioc->raid_device_lock, flags); |
| 1281 | return 0; | 1281 | return 0; |
diff --git a/drivers/scsi/qla2xxx/qla_os.c b/drivers/scsi/qla2xxx/qla_os.c index ace65db1d2a2..567fa080e261 100644 --- a/drivers/scsi/qla2xxx/qla_os.c +++ b/drivers/scsi/qla2xxx/qla_os.c | |||
| @@ -707,6 +707,11 @@ qla2xxx_queuecommand(struct Scsi_Host *host, struct scsi_cmnd *cmd) | |||
| 707 | srb_t *sp; | 707 | srb_t *sp; |
| 708 | int rval; | 708 | int rval; |
| 709 | 709 | ||
| 710 | if (unlikely(test_bit(UNLOADING, &base_vha->dpc_flags))) { | ||
| 711 | cmd->result = DID_NO_CONNECT << 16; | ||
| 712 | goto qc24_fail_command; | ||
| 713 | } | ||
| 714 | |||
| 710 | if (ha->flags.eeh_busy) { | 715 | if (ha->flags.eeh_busy) { |
| 711 | if (ha->flags.pci_channel_io_perm_failure) { | 716 | if (ha->flags.pci_channel_io_perm_failure) { |
| 712 | ql_dbg(ql_dbg_aer, vha, 0x9010, | 717 | ql_dbg(ql_dbg_aer, vha, 0x9010, |
| @@ -1451,6 +1456,15 @@ qla2x00_abort_all_cmds(scsi_qla_host_t *vha, int res) | |||
| 1451 | for (cnt = 1; cnt < req->num_outstanding_cmds; cnt++) { | 1456 | for (cnt = 1; cnt < req->num_outstanding_cmds; cnt++) { |
| 1452 | sp = req->outstanding_cmds[cnt]; | 1457 | sp = req->outstanding_cmds[cnt]; |
| 1453 | if (sp) { | 1458 | if (sp) { |
| 1459 | /* Get a reference to the sp and drop the lock. | ||
| 1460 | * The reference ensures this sp->done() call | ||
| 1461 | * - and not the call in qla2xxx_eh_abort() - | ||
| 1462 | * ends the SCSI command (with result 'res'). | ||
| 1463 | */ | ||
| 1464 | sp_get(sp); | ||
| 1465 | spin_unlock_irqrestore(&ha->hardware_lock, flags); | ||
| 1466 | qla2xxx_eh_abort(GET_CMD_SP(sp)); | ||
| 1467 | spin_lock_irqsave(&ha->hardware_lock, flags); | ||
| 1454 | req->outstanding_cmds[cnt] = NULL; | 1468 | req->outstanding_cmds[cnt] = NULL; |
| 1455 | sp->done(vha, sp, res); | 1469 | sp->done(vha, sp, res); |
| 1456 | } | 1470 | } |
| @@ -2341,6 +2355,8 @@ qla2xxx_scan_finished(struct Scsi_Host *shost, unsigned long time) | |||
| 2341 | { | 2355 | { |
| 2342 | scsi_qla_host_t *vha = shost_priv(shost); | 2356 | scsi_qla_host_t *vha = shost_priv(shost); |
| 2343 | 2357 | ||
| 2358 | if (test_bit(UNLOADING, &vha->dpc_flags)) | ||
| 2359 | return 1; | ||
| 2344 | if (!vha->host) | 2360 | if (!vha->host) |
| 2345 | return 1; | 2361 | return 1; |
| 2346 | if (time > vha->hw->loop_reset_delay * HZ) | 2362 | if (time > vha->hw->loop_reset_delay * HZ) |
diff --git a/drivers/scsi/vmw_pvscsi.c b/drivers/scsi/vmw_pvscsi.c index 4a0d3cdc607c..15ca09cd16f3 100644 --- a/drivers/scsi/vmw_pvscsi.c +++ b/drivers/scsi/vmw_pvscsi.c | |||
| @@ -793,6 +793,7 @@ static int pvscsi_abort(struct scsi_cmnd *cmd) | |||
| 793 | unsigned long flags; | 793 | unsigned long flags; |
| 794 | int result = SUCCESS; | 794 | int result = SUCCESS; |
| 795 | DECLARE_COMPLETION_ONSTACK(abort_cmp); | 795 | DECLARE_COMPLETION_ONSTACK(abort_cmp); |
| 796 | int done; | ||
| 796 | 797 | ||
| 797 | scmd_printk(KERN_DEBUG, cmd, "task abort on host %u, %p\n", | 798 | scmd_printk(KERN_DEBUG, cmd, "task abort on host %u, %p\n", |
| 798 | adapter->host->host_no, cmd); | 799 | adapter->host->host_no, cmd); |
| @@ -824,10 +825,10 @@ static int pvscsi_abort(struct scsi_cmnd *cmd) | |||
| 824 | pvscsi_abort_cmd(adapter, ctx); | 825 | pvscsi_abort_cmd(adapter, ctx); |
| 825 | spin_unlock_irqrestore(&adapter->hw_lock, flags); | 826 | spin_unlock_irqrestore(&adapter->hw_lock, flags); |
| 826 | /* Wait for 2 secs for the completion. */ | 827 | /* Wait for 2 secs for the completion. */ |
| 827 | wait_for_completion_timeout(&abort_cmp, msecs_to_jiffies(2000)); | 828 | done = wait_for_completion_timeout(&abort_cmp, msecs_to_jiffies(2000)); |
| 828 | spin_lock_irqsave(&adapter->hw_lock, flags); | 829 | spin_lock_irqsave(&adapter->hw_lock, flags); |
| 829 | 830 | ||
| 830 | if (!completion_done(&abort_cmp)) { | 831 | if (!done) { |
| 831 | /* | 832 | /* |
| 832 | * Failed to abort the command, unmark the fact that it | 833 | * Failed to abort the command, unmark the fact that it |
| 833 | * was requested to be aborted. | 834 | * was requested to be aborted. |
diff --git a/drivers/scsi/vmw_pvscsi.h b/drivers/scsi/vmw_pvscsi.h index c097d2ccbde3..d41292ef85f2 100644 --- a/drivers/scsi/vmw_pvscsi.h +++ b/drivers/scsi/vmw_pvscsi.h | |||
| @@ -26,7 +26,7 @@ | |||
| 26 | 26 | ||
| 27 | #include <linux/types.h> | 27 | #include <linux/types.h> |
| 28 | 28 | ||
| 29 | #define PVSCSI_DRIVER_VERSION_STRING "1.0.6.0-k" | 29 | #define PVSCSI_DRIVER_VERSION_STRING "1.0.7.0-k" |
| 30 | 30 | ||
| 31 | #define PVSCSI_MAX_NUM_SG_ENTRIES_PER_SEGMENT 128 | 31 | #define PVSCSI_MAX_NUM_SG_ENTRIES_PER_SEGMENT 128 |
| 32 | 32 | ||
