diff options
| -rw-r--r-- | block/bsg.c | 8 | ||||
| -rw-r--r-- | drivers/s390/scsi/zfcp_erp.c | 11 | ||||
| -rw-r--r-- | drivers/s390/scsi/zfcp_fsf.c | 11 | ||||
| -rw-r--r-- | drivers/s390/scsi/zfcp_scsi.c | 7 | ||||
| -rw-r--r-- | drivers/scsi/hpsa.c | 8 | ||||
| -rw-r--r-- | drivers/scsi/osd/osd_initiator.c | 4 | ||||
| -rw-r--r-- | drivers/scsi/pmcraid.c | 4 | ||||
| -rw-r--r-- | drivers/scsi/pmcraid.h | 6 | ||||
| -rw-r--r-- | drivers/scsi/qla2xxx/qla_def.h | 1 | ||||
| -rw-r--r-- | drivers/scsi/qla2xxx/qla_iocb.c | 1 | ||||
| -rw-r--r-- | drivers/scsi/qla2xxx/qla_isr.c | 5 | ||||
| -rw-r--r-- | drivers/scsi/qla2xxx/qla_nx.c | 1 | ||||
| -rw-r--r-- | drivers/scsi/qla2xxx/qla_os.c | 3 | ||||
| -rw-r--r-- | drivers/scsi/qla2xxx/qla_version.h | 4 | ||||
| -rw-r--r-- | drivers/scsi/scsi_error.c | 26 | ||||
| -rw-r--r-- | drivers/scsi/scsi_lib.c | 5 |
16 files changed, 43 insertions, 62 deletions
diff --git a/block/bsg.c b/block/bsg.c index f20d6a789d48..0c8b64a16484 100644 --- a/block/bsg.c +++ b/block/bsg.c | |||
| @@ -250,6 +250,14 @@ bsg_map_hdr(struct bsg_device *bd, struct sg_io_v4 *hdr, fmode_t has_write_perm, | |||
| 250 | int ret, rw; | 250 | int ret, rw; |
| 251 | unsigned int dxfer_len; | 251 | unsigned int dxfer_len; |
| 252 | void *dxferp = NULL; | 252 | void *dxferp = NULL; |
| 253 | struct bsg_class_device *bcd = &q->bsg_dev; | ||
| 254 | |||
| 255 | /* if the LLD has been removed then the bsg_unregister_queue will | ||
| 256 | * eventually be called and the class_dev was freed, so we can no | ||
| 257 | * longer use this request_queue. Return no such address. | ||
| 258 | */ | ||
| 259 | if (!bcd->class_dev) | ||
| 260 | return ERR_PTR(-ENXIO); | ||
| 253 | 261 | ||
| 254 | dprintk("map hdr %llx/%u %llx/%u\n", (unsigned long long) hdr->dout_xferp, | 262 | dprintk("map hdr %llx/%u %llx/%u\n", (unsigned long long) hdr->dout_xferp, |
| 255 | hdr->dout_xfer_len, (unsigned long long) hdr->din_xferp, | 263 | hdr->dout_xfer_len, (unsigned long long) hdr->din_xferp, |
diff --git a/drivers/s390/scsi/zfcp_erp.c b/drivers/s390/scsi/zfcp_erp.c index d37c7331f244..0bcd5806bd9a 100644 --- a/drivers/s390/scsi/zfcp_erp.c +++ b/drivers/s390/scsi/zfcp_erp.c | |||
| @@ -156,6 +156,8 @@ static int zfcp_erp_required_act(int want, struct zfcp_adapter *adapter, | |||
| 156 | if (!(a_status & ZFCP_STATUS_COMMON_RUNNING) || | 156 | if (!(a_status & ZFCP_STATUS_COMMON_RUNNING) || |
| 157 | a_status & ZFCP_STATUS_COMMON_ERP_FAILED) | 157 | a_status & ZFCP_STATUS_COMMON_ERP_FAILED) |
| 158 | return 0; | 158 | return 0; |
| 159 | if (p_status & ZFCP_STATUS_COMMON_NOESC) | ||
| 160 | return need; | ||
| 159 | if (!(a_status & ZFCP_STATUS_COMMON_UNBLOCKED)) | 161 | if (!(a_status & ZFCP_STATUS_COMMON_UNBLOCKED)) |
| 160 | need = ZFCP_ERP_ACTION_REOPEN_ADAPTER; | 162 | need = ZFCP_ERP_ACTION_REOPEN_ADAPTER; |
| 161 | /* fall through */ | 163 | /* fall through */ |
| @@ -188,6 +190,9 @@ static struct zfcp_erp_action *zfcp_erp_setup_act(int need, u32 act_status, | |||
| 188 | atomic_set_mask(ZFCP_STATUS_COMMON_ERP_INUSE, | 190 | atomic_set_mask(ZFCP_STATUS_COMMON_ERP_INUSE, |
| 189 | &zfcp_sdev->status); | 191 | &zfcp_sdev->status); |
| 190 | erp_action = &zfcp_sdev->erp_action; | 192 | erp_action = &zfcp_sdev->erp_action; |
| 193 | memset(erp_action, 0, sizeof(struct zfcp_erp_action)); | ||
| 194 | erp_action->port = port; | ||
| 195 | erp_action->sdev = sdev; | ||
| 191 | if (!(atomic_read(&zfcp_sdev->status) & | 196 | if (!(atomic_read(&zfcp_sdev->status) & |
| 192 | ZFCP_STATUS_COMMON_RUNNING)) | 197 | ZFCP_STATUS_COMMON_RUNNING)) |
| 193 | act_status |= ZFCP_STATUS_ERP_CLOSE_ONLY; | 198 | act_status |= ZFCP_STATUS_ERP_CLOSE_ONLY; |
| @@ -200,6 +205,8 @@ static struct zfcp_erp_action *zfcp_erp_setup_act(int need, u32 act_status, | |||
| 200 | zfcp_erp_action_dismiss_port(port); | 205 | zfcp_erp_action_dismiss_port(port); |
| 201 | atomic_set_mask(ZFCP_STATUS_COMMON_ERP_INUSE, &port->status); | 206 | atomic_set_mask(ZFCP_STATUS_COMMON_ERP_INUSE, &port->status); |
| 202 | erp_action = &port->erp_action; | 207 | erp_action = &port->erp_action; |
| 208 | memset(erp_action, 0, sizeof(struct zfcp_erp_action)); | ||
| 209 | erp_action->port = port; | ||
| 203 | if (!(atomic_read(&port->status) & ZFCP_STATUS_COMMON_RUNNING)) | 210 | if (!(atomic_read(&port->status) & ZFCP_STATUS_COMMON_RUNNING)) |
| 204 | act_status |= ZFCP_STATUS_ERP_CLOSE_ONLY; | 211 | act_status |= ZFCP_STATUS_ERP_CLOSE_ONLY; |
| 205 | break; | 212 | break; |
| @@ -209,6 +216,7 @@ static struct zfcp_erp_action *zfcp_erp_setup_act(int need, u32 act_status, | |||
| 209 | zfcp_erp_action_dismiss_adapter(adapter); | 216 | zfcp_erp_action_dismiss_adapter(adapter); |
| 210 | atomic_set_mask(ZFCP_STATUS_COMMON_ERP_INUSE, &adapter->status); | 217 | atomic_set_mask(ZFCP_STATUS_COMMON_ERP_INUSE, &adapter->status); |
| 211 | erp_action = &adapter->erp_action; | 218 | erp_action = &adapter->erp_action; |
| 219 | memset(erp_action, 0, sizeof(struct zfcp_erp_action)); | ||
| 212 | if (!(atomic_read(&adapter->status) & | 220 | if (!(atomic_read(&adapter->status) & |
| 213 | ZFCP_STATUS_COMMON_RUNNING)) | 221 | ZFCP_STATUS_COMMON_RUNNING)) |
| 214 | act_status |= ZFCP_STATUS_ERP_CLOSE_ONLY; | 222 | act_status |= ZFCP_STATUS_ERP_CLOSE_ONLY; |
| @@ -218,10 +226,7 @@ static struct zfcp_erp_action *zfcp_erp_setup_act(int need, u32 act_status, | |||
| 218 | return NULL; | 226 | return NULL; |
| 219 | } | 227 | } |
| 220 | 228 | ||
| 221 | memset(erp_action, 0, sizeof(struct zfcp_erp_action)); | ||
| 222 | erp_action->adapter = adapter; | 229 | erp_action->adapter = adapter; |
| 223 | erp_action->port = port; | ||
| 224 | erp_action->sdev = sdev; | ||
| 225 | erp_action->action = need; | 230 | erp_action->action = need; |
| 226 | erp_action->status = act_status; | 231 | erp_action->status = act_status; |
| 227 | 232 | ||
diff --git a/drivers/s390/scsi/zfcp_fsf.c b/drivers/s390/scsi/zfcp_fsf.c index be0317457147..2eb7dd56ab80 100644 --- a/drivers/s390/scsi/zfcp_fsf.c +++ b/drivers/s390/scsi/zfcp_fsf.c | |||
| @@ -851,7 +851,7 @@ struct zfcp_fsf_req *zfcp_fsf_abort_fcp_cmnd(struct scsi_cmnd *scmnd) | |||
| 851 | 851 | ||
| 852 | zfcp_qdio_set_sbale_last(qdio, &req->qdio_req); | 852 | zfcp_qdio_set_sbale_last(qdio, &req->qdio_req); |
| 853 | 853 | ||
| 854 | req->data = zfcp_sdev; | 854 | req->data = sdev; |
| 855 | req->handler = zfcp_fsf_abort_fcp_command_handler; | 855 | req->handler = zfcp_fsf_abort_fcp_command_handler; |
| 856 | req->qtcb->header.lun_handle = zfcp_sdev->lun_handle; | 856 | req->qtcb->header.lun_handle = zfcp_sdev->lun_handle; |
| 857 | req->qtcb->header.port_handle = zfcp_sdev->port->handle; | 857 | req->qtcb->header.port_handle = zfcp_sdev->port->handle; |
| @@ -2069,8 +2069,6 @@ static void zfcp_fsf_fcp_cmnd_handler(struct zfcp_fsf_req *req) | |||
| 2069 | struct fcp_resp_with_ext *fcp_rsp; | 2069 | struct fcp_resp_with_ext *fcp_rsp; |
| 2070 | unsigned long flags; | 2070 | unsigned long flags; |
| 2071 | 2071 | ||
| 2072 | zfcp_fsf_fcp_handler_common(req); | ||
| 2073 | |||
| 2074 | read_lock_irqsave(&req->adapter->abort_lock, flags); | 2072 | read_lock_irqsave(&req->adapter->abort_lock, flags); |
| 2075 | 2073 | ||
| 2076 | scpnt = req->data; | 2074 | scpnt = req->data; |
| @@ -2079,6 +2077,8 @@ static void zfcp_fsf_fcp_cmnd_handler(struct zfcp_fsf_req *req) | |||
| 2079 | return; | 2077 | return; |
| 2080 | } | 2078 | } |
| 2081 | 2079 | ||
| 2080 | zfcp_fsf_fcp_handler_common(req); | ||
| 2081 | |||
| 2082 | if (unlikely(req->status & ZFCP_STATUS_FSFREQ_ERROR)) { | 2082 | if (unlikely(req->status & ZFCP_STATUS_FSFREQ_ERROR)) { |
| 2083 | set_host_byte(scpnt, DID_TRANSPORT_DISRUPTED); | 2083 | set_host_byte(scpnt, DID_TRANSPORT_DISRUPTED); |
| 2084 | goto skip_fsfstatus; | 2084 | goto skip_fsfstatus; |
| @@ -2170,12 +2170,13 @@ int zfcp_fsf_fcp_cmnd(struct scsi_cmnd *scsi_cmnd) | |||
| 2170 | struct zfcp_adapter *adapter = zfcp_sdev->port->adapter; | 2170 | struct zfcp_adapter *adapter = zfcp_sdev->port->adapter; |
| 2171 | struct zfcp_qdio *qdio = adapter->qdio; | 2171 | struct zfcp_qdio *qdio = adapter->qdio; |
| 2172 | struct fsf_qtcb_bottom_io *io; | 2172 | struct fsf_qtcb_bottom_io *io; |
| 2173 | unsigned long flags; | ||
| 2173 | 2174 | ||
| 2174 | if (unlikely(!(atomic_read(&zfcp_sdev->status) & | 2175 | if (unlikely(!(atomic_read(&zfcp_sdev->status) & |
| 2175 | ZFCP_STATUS_COMMON_UNBLOCKED))) | 2176 | ZFCP_STATUS_COMMON_UNBLOCKED))) |
| 2176 | return -EBUSY; | 2177 | return -EBUSY; |
| 2177 | 2178 | ||
| 2178 | spin_lock(&qdio->req_q_lock); | 2179 | spin_lock_irqsave(&qdio->req_q_lock, flags); |
| 2179 | if (atomic_read(&qdio->req_q_free) <= 0) { | 2180 | if (atomic_read(&qdio->req_q_free) <= 0) { |
| 2180 | atomic_inc(&qdio->req_q_full); | 2181 | atomic_inc(&qdio->req_q_full); |
| 2181 | goto out; | 2182 | goto out; |
| @@ -2239,7 +2240,7 @@ failed_scsi_cmnd: | |||
| 2239 | zfcp_fsf_req_free(req); | 2240 | zfcp_fsf_req_free(req); |
| 2240 | scsi_cmnd->host_scribble = NULL; | 2241 | scsi_cmnd->host_scribble = NULL; |
| 2241 | out: | 2242 | out: |
| 2242 | spin_unlock(&qdio->req_q_lock); | 2243 | spin_unlock_irqrestore(&qdio->req_q_lock, flags); |
| 2243 | return retval; | 2244 | return retval; |
| 2244 | } | 2245 | } |
| 2245 | 2246 | ||
diff --git a/drivers/s390/scsi/zfcp_scsi.c b/drivers/s390/scsi/zfcp_scsi.c index 6bd2dbc4c316..63529ed801eb 100644 --- a/drivers/s390/scsi/zfcp_scsi.c +++ b/drivers/s390/scsi/zfcp_scsi.c | |||
| @@ -76,8 +76,8 @@ static void zfcp_scsi_command_fail(struct scsi_cmnd *scpnt, int result) | |||
| 76 | scpnt->scsi_done(scpnt); | 76 | scpnt->scsi_done(scpnt); |
| 77 | } | 77 | } |
| 78 | 78 | ||
| 79 | static int zfcp_scsi_queuecommand_lck(struct scsi_cmnd *scpnt, | 79 | static |
| 80 | void (*done) (struct scsi_cmnd *)) | 80 | int zfcp_scsi_queuecommand(struct Scsi_Host *shost, struct scsi_cmnd *scpnt) |
| 81 | { | 81 | { |
| 82 | struct zfcp_scsi_dev *zfcp_sdev = sdev_to_zfcp(scpnt->device); | 82 | struct zfcp_scsi_dev *zfcp_sdev = sdev_to_zfcp(scpnt->device); |
| 83 | struct zfcp_adapter *adapter = zfcp_sdev->port->adapter; | 83 | struct zfcp_adapter *adapter = zfcp_sdev->port->adapter; |
| @@ -87,7 +87,6 @@ static int zfcp_scsi_queuecommand_lck(struct scsi_cmnd *scpnt, | |||
| 87 | /* reset the status for this request */ | 87 | /* reset the status for this request */ |
| 88 | scpnt->result = 0; | 88 | scpnt->result = 0; |
| 89 | scpnt->host_scribble = NULL; | 89 | scpnt->host_scribble = NULL; |
| 90 | scpnt->scsi_done = done; | ||
| 91 | 90 | ||
| 92 | scsi_result = fc_remote_port_chkready(rport); | 91 | scsi_result = fc_remote_port_chkready(rport); |
| 93 | if (unlikely(scsi_result)) { | 92 | if (unlikely(scsi_result)) { |
| @@ -127,8 +126,6 @@ static int zfcp_scsi_queuecommand_lck(struct scsi_cmnd *scpnt, | |||
| 127 | return ret; | 126 | return ret; |
| 128 | } | 127 | } |
| 129 | 128 | ||
| 130 | static DEF_SCSI_QCMD(zfcp_scsi_queuecommand) | ||
| 131 | |||
| 132 | static int zfcp_scsi_slave_alloc(struct scsi_device *sdev) | 129 | static int zfcp_scsi_slave_alloc(struct scsi_device *sdev) |
| 133 | { | 130 | { |
| 134 | struct fc_rport *rport = starget_to_rport(scsi_target(sdev)); | 131 | struct fc_rport *rport = starget_to_rport(scsi_target(sdev)); |
diff --git a/drivers/scsi/hpsa.c b/drivers/scsi/hpsa.c index b2fb2b2a6e70..a6dea08664fc 100644 --- a/drivers/scsi/hpsa.c +++ b/drivers/scsi/hpsa.c | |||
| @@ -90,11 +90,7 @@ static const struct pci_device_id hpsa_pci_device_id[] = { | |||
| 90 | {PCI_VENDOR_ID_HP, PCI_DEVICE_ID_HP_CISSE, 0x103C, 0x3252}, | 90 | {PCI_VENDOR_ID_HP, PCI_DEVICE_ID_HP_CISSE, 0x103C, 0x3252}, |
| 91 | {PCI_VENDOR_ID_HP, PCI_DEVICE_ID_HP_CISSE, 0x103C, 0x3253}, | 91 | {PCI_VENDOR_ID_HP, PCI_DEVICE_ID_HP_CISSE, 0x103C, 0x3253}, |
| 92 | {PCI_VENDOR_ID_HP, PCI_DEVICE_ID_HP_CISSE, 0x103C, 0x3254}, | 92 | {PCI_VENDOR_ID_HP, PCI_DEVICE_ID_HP_CISSE, 0x103C, 0x3254}, |
| 93 | #define PCI_DEVICE_ID_HP_CISSF 0x333f | 93 | {PCI_VENDOR_ID_HP, PCI_ANY_ID, PCI_ANY_ID, PCI_ANY_ID, |
| 94 | {PCI_VENDOR_ID_HP, PCI_DEVICE_ID_HP_CISSF, 0x103C, 0x333F}, | ||
| 95 | {PCI_VENDOR_ID_HP, PCI_ANY_ID, PCI_ANY_ID, PCI_ANY_ID, | ||
| 96 | PCI_CLASS_STORAGE_RAID << 8, 0xffff << 8, 0}, | ||
| 97 | {PCI_VENDOR_ID_COMPAQ, PCI_ANY_ID, PCI_ANY_ID, PCI_ANY_ID, | ||
| 98 | PCI_CLASS_STORAGE_RAID << 8, 0xffff << 8, 0}, | 94 | PCI_CLASS_STORAGE_RAID << 8, 0xffff << 8, 0}, |
| 99 | {0,} | 95 | {0,} |
| 100 | }; | 96 | }; |
| @@ -113,8 +109,6 @@ static struct board_type products[] = { | |||
| 113 | {0x3249103C, "Smart Array P812", &SA5_access}, | 109 | {0x3249103C, "Smart Array P812", &SA5_access}, |
| 114 | {0x324a103C, "Smart Array P712m", &SA5_access}, | 110 | {0x324a103C, "Smart Array P712m", &SA5_access}, |
| 115 | {0x324b103C, "Smart Array P711m", &SA5_access}, | 111 | {0x324b103C, "Smart Array P711m", &SA5_access}, |
| 116 | {0x3233103C, "StorageWorks P1210m", &SA5_access}, | ||
| 117 | {0x333F103C, "StorageWorks P1210m", &SA5_access}, | ||
| 118 | {0x3250103C, "Smart Array", &SA5_access}, | 112 | {0x3250103C, "Smart Array", &SA5_access}, |
| 119 | {0x3250113C, "Smart Array", &SA5_access}, | 113 | {0x3250113C, "Smart Array", &SA5_access}, |
| 120 | {0x3250123C, "Smart Array", &SA5_access}, | 114 | {0x3250123C, "Smart Array", &SA5_access}, |
diff --git a/drivers/scsi/osd/osd_initiator.c b/drivers/scsi/osd/osd_initiator.c index 0433ea6f27c9..b37c8a3c1bb0 100644 --- a/drivers/scsi/osd/osd_initiator.c +++ b/drivers/scsi/osd/osd_initiator.c | |||
| @@ -951,8 +951,8 @@ static int _osd_req_finalize_cdb_cont(struct osd_request *or, const u8 *cap_key) | |||
| 951 | /* create a bio for continuation segment */ | 951 | /* create a bio for continuation segment */ |
| 952 | bio = bio_map_kern(req_q, or->cdb_cont.buff, or->cdb_cont.total_bytes, | 952 | bio = bio_map_kern(req_q, or->cdb_cont.buff, or->cdb_cont.total_bytes, |
| 953 | GFP_KERNEL); | 953 | GFP_KERNEL); |
| 954 | if (unlikely(!bio)) | 954 | if (IS_ERR(bio)) |
| 955 | return -ENOMEM; | 955 | return PTR_ERR(bio); |
| 956 | 956 | ||
| 957 | bio->bi_rw |= REQ_WRITE; | 957 | bio->bi_rw |= REQ_WRITE; |
| 958 | 958 | ||
diff --git a/drivers/scsi/pmcraid.c b/drivers/scsi/pmcraid.c index 5e76a624cb08..300d59f389da 100644 --- a/drivers/scsi/pmcraid.c +++ b/drivers/scsi/pmcraid.c | |||
| @@ -62,6 +62,7 @@ | |||
| 62 | static unsigned int pmcraid_debug_log; | 62 | static unsigned int pmcraid_debug_log; |
| 63 | static unsigned int pmcraid_disable_aen; | 63 | static unsigned int pmcraid_disable_aen; |
| 64 | static unsigned int pmcraid_log_level = IOASC_LOG_LEVEL_MUST; | 64 | static unsigned int pmcraid_log_level = IOASC_LOG_LEVEL_MUST; |
| 65 | static unsigned int pmcraid_enable_msix; | ||
| 65 | 66 | ||
| 66 | /* | 67 | /* |
| 67 | * Data structures to support multiple adapters by the LLD. | 68 | * Data structures to support multiple adapters by the LLD. |
| @@ -4691,7 +4692,8 @@ pmcraid_register_interrupt_handler(struct pmcraid_instance *pinstance) | |||
| 4691 | int rc; | 4692 | int rc; |
| 4692 | struct pci_dev *pdev = pinstance->pdev; | 4693 | struct pci_dev *pdev = pinstance->pdev; |
| 4693 | 4694 | ||
| 4694 | if (pci_find_capability(pdev, PCI_CAP_ID_MSIX)) { | 4695 | if ((pmcraid_enable_msix) && |
| 4696 | (pci_find_capability(pdev, PCI_CAP_ID_MSIX))) { | ||
| 4695 | int num_hrrq = PMCRAID_NUM_MSIX_VECTORS; | 4697 | int num_hrrq = PMCRAID_NUM_MSIX_VECTORS; |
| 4696 | struct msix_entry entries[PMCRAID_NUM_MSIX_VECTORS]; | 4698 | struct msix_entry entries[PMCRAID_NUM_MSIX_VECTORS]; |
| 4697 | int i; | 4699 | int i; |
diff --git a/drivers/scsi/pmcraid.h b/drivers/scsi/pmcraid.h index 1134279604e8..4db210d93947 100644 --- a/drivers/scsi/pmcraid.h +++ b/drivers/scsi/pmcraid.h | |||
| @@ -42,7 +42,7 @@ | |||
| 42 | */ | 42 | */ |
| 43 | #define PMCRAID_DRIVER_NAME "PMC MaxRAID" | 43 | #define PMCRAID_DRIVER_NAME "PMC MaxRAID" |
| 44 | #define PMCRAID_DEVFILE "pmcsas" | 44 | #define PMCRAID_DEVFILE "pmcsas" |
| 45 | #define PMCRAID_DRIVER_VERSION "2.0.3" | 45 | #define PMCRAID_DRIVER_VERSION "1.0.3" |
| 46 | #define PMCRAID_DRIVER_DATE __DATE__ | 46 | #define PMCRAID_DRIVER_DATE __DATE__ |
| 47 | 47 | ||
| 48 | #define PMCRAID_FW_VERSION_1 0x002 | 48 | #define PMCRAID_FW_VERSION_1 0x002 |
| @@ -333,11 +333,9 @@ struct pmcraid_config_table_entry { | |||
| 333 | __u8 lun[PMCRAID_LUN_LEN]; | 333 | __u8 lun[PMCRAID_LUN_LEN]; |
| 334 | } __attribute__((packed, aligned(4))); | 334 | } __attribute__((packed, aligned(4))); |
| 335 | 335 | ||
| 336 | /* extended configuration table sizes are of 64 bytes in size */ | 336 | /* extended configuration table sizes are also of 32 bytes in size */ |
| 337 | #define PMCRAID_CFGTE_EXT_SIZE 32 | ||
| 338 | struct pmcraid_config_table_entry_ext { | 337 | struct pmcraid_config_table_entry_ext { |
| 339 | struct pmcraid_config_table_entry cfgte; | 338 | struct pmcraid_config_table_entry cfgte; |
| 340 | __u8 cfgte_ext[PMCRAID_CFGTE_EXT_SIZE]; | ||
| 341 | }; | 339 | }; |
| 342 | 340 | ||
| 343 | /* resource types (config_table_entry.resource_type values) */ | 341 | /* resource types (config_table_entry.resource_type values) */ |
diff --git a/drivers/scsi/qla2xxx/qla_def.h b/drivers/scsi/qla2xxx/qla_def.h index 3a22effced5f..9ce539d4557e 100644 --- a/drivers/scsi/qla2xxx/qla_def.h +++ b/drivers/scsi/qla2xxx/qla_def.h | |||
| @@ -2409,7 +2409,6 @@ struct qla_hw_data { | |||
| 2409 | uint32_t enable_target_reset :1; | 2409 | uint32_t enable_target_reset :1; |
| 2410 | uint32_t enable_lip_full_login :1; | 2410 | uint32_t enable_lip_full_login :1; |
| 2411 | uint32_t enable_led_scheme :1; | 2411 | uint32_t enable_led_scheme :1; |
| 2412 | uint32_t inta_enabled :1; | ||
| 2413 | uint32_t msi_enabled :1; | 2412 | uint32_t msi_enabled :1; |
| 2414 | uint32_t msix_enabled :1; | 2413 | uint32_t msix_enabled :1; |
| 2415 | uint32_t disable_serdes :1; | 2414 | uint32_t disable_serdes :1; |
diff --git a/drivers/scsi/qla2xxx/qla_iocb.c b/drivers/scsi/qla2xxx/qla_iocb.c index 5f94430b42f0..4c1ba6263eb3 100644 --- a/drivers/scsi/qla2xxx/qla_iocb.c +++ b/drivers/scsi/qla2xxx/qla_iocb.c | |||
| @@ -1061,6 +1061,7 @@ qla24xx_build_scsi_crc_2_iocbs(srb_t *sp, struct cmd_type_crc_2 *cmd_pkt, | |||
| 1061 | fcp_cmnd->additional_cdb_len |= 2; | 1061 | fcp_cmnd->additional_cdb_len |= 2; |
| 1062 | 1062 | ||
| 1063 | int_to_scsilun(sp->cmd->device->lun, &fcp_cmnd->lun); | 1063 | int_to_scsilun(sp->cmd->device->lun, &fcp_cmnd->lun); |
| 1064 | host_to_fcp_swap((uint8_t *)&fcp_cmnd->lun, sizeof(fcp_cmnd->lun)); | ||
| 1064 | memcpy(fcp_cmnd->cdb, cmd->cmnd, cmd->cmd_len); | 1065 | memcpy(fcp_cmnd->cdb, cmd->cmnd, cmd->cmd_len); |
| 1065 | cmd_pkt->fcp_cmnd_dseg_len = cpu_to_le16(fcp_cmnd_len); | 1066 | cmd_pkt->fcp_cmnd_dseg_len = cpu_to_le16(fcp_cmnd_len); |
| 1066 | cmd_pkt->fcp_cmnd_dseg_address[0] = cpu_to_le32( | 1067 | cmd_pkt->fcp_cmnd_dseg_address[0] = cpu_to_le32( |
diff --git a/drivers/scsi/qla2xxx/qla_isr.c b/drivers/scsi/qla2xxx/qla_isr.c index 1f06ddd9bdd1..7f77898486a9 100644 --- a/drivers/scsi/qla2xxx/qla_isr.c +++ b/drivers/scsi/qla2xxx/qla_isr.c | |||
| @@ -2491,14 +2491,15 @@ skip_msix: | |||
| 2491 | skip_msi: | 2491 | skip_msi: |
| 2492 | 2492 | ||
| 2493 | ret = request_irq(ha->pdev->irq, ha->isp_ops->intr_handler, | 2493 | ret = request_irq(ha->pdev->irq, ha->isp_ops->intr_handler, |
| 2494 | IRQF_SHARED, QLA2XXX_DRIVER_NAME, rsp); | 2494 | ha->flags.msi_enabled ? 0 : IRQF_SHARED, |
| 2495 | QLA2XXX_DRIVER_NAME, rsp); | ||
| 2495 | if (ret) { | 2496 | if (ret) { |
| 2496 | qla_printk(KERN_WARNING, ha, | 2497 | qla_printk(KERN_WARNING, ha, |
| 2497 | "Failed to reserve interrupt %d already in use.\n", | 2498 | "Failed to reserve interrupt %d already in use.\n", |
| 2498 | ha->pdev->irq); | 2499 | ha->pdev->irq); |
| 2499 | goto fail; | 2500 | goto fail; |
| 2500 | } | 2501 | } |
| 2501 | ha->flags.inta_enabled = 1; | 2502 | |
| 2502 | clear_risc_ints: | 2503 | clear_risc_ints: |
| 2503 | 2504 | ||
| 2504 | /* | 2505 | /* |
diff --git a/drivers/scsi/qla2xxx/qla_nx.c b/drivers/scsi/qla2xxx/qla_nx.c index 8d9edfb39803..ae2acacc0003 100644 --- a/drivers/scsi/qla2xxx/qla_nx.c +++ b/drivers/scsi/qla2xxx/qla_nx.c | |||
| @@ -2749,6 +2749,7 @@ sufficient_dsds: | |||
| 2749 | goto queuing_error_fcp_cmnd; | 2749 | goto queuing_error_fcp_cmnd; |
| 2750 | 2750 | ||
| 2751 | int_to_scsilun(sp->cmd->device->lun, &cmd_pkt->lun); | 2751 | int_to_scsilun(sp->cmd->device->lun, &cmd_pkt->lun); |
| 2752 | host_to_fcp_swap((uint8_t *)&cmd_pkt->lun, sizeof(cmd_pkt->lun)); | ||
| 2752 | 2753 | ||
| 2753 | /* build FCP_CMND IU */ | 2754 | /* build FCP_CMND IU */ |
| 2754 | memset(ctx->fcp_cmnd, 0, sizeof(struct fcp_cmnd)); | 2755 | memset(ctx->fcp_cmnd, 0, sizeof(struct fcp_cmnd)); |
diff --git a/drivers/scsi/qla2xxx/qla_os.c b/drivers/scsi/qla2xxx/qla_os.c index 1644eabaafeb..2c0876c81a3f 100644 --- a/drivers/scsi/qla2xxx/qla_os.c +++ b/drivers/scsi/qla2xxx/qla_os.c | |||
| @@ -829,7 +829,7 @@ qla2xxx_eh_abort(struct scsi_cmnd *cmd) | |||
| 829 | { | 829 | { |
| 830 | scsi_qla_host_t *vha = shost_priv(cmd->device->host); | 830 | scsi_qla_host_t *vha = shost_priv(cmd->device->host); |
| 831 | srb_t *sp; | 831 | srb_t *sp; |
| 832 | int ret; | 832 | int ret = SUCCESS; |
| 833 | unsigned int id, lun; | 833 | unsigned int id, lun; |
| 834 | unsigned long flags; | 834 | unsigned long flags; |
| 835 | int wait = 0; | 835 | int wait = 0; |
| @@ -2064,6 +2064,7 @@ qla2x00_probe_one(struct pci_dev *pdev, const struct pci_device_id *id) | |||
| 2064 | ha->init_cb_size = sizeof(struct mid_init_cb_81xx); | 2064 | ha->init_cb_size = sizeof(struct mid_init_cb_81xx); |
| 2065 | ha->gid_list_info_size = 8; | 2065 | ha->gid_list_info_size = 8; |
| 2066 | ha->optrom_size = OPTROM_SIZE_82XX; | 2066 | ha->optrom_size = OPTROM_SIZE_82XX; |
| 2067 | ha->nvram_npiv_size = QLA_MAX_VPORTS_QLA25XX; | ||
| 2067 | ha->isp_ops = &qla82xx_isp_ops; | 2068 | ha->isp_ops = &qla82xx_isp_ops; |
| 2068 | ha->flash_conf_off = FARX_ACCESS_FLASH_CONF; | 2069 | ha->flash_conf_off = FARX_ACCESS_FLASH_CONF; |
| 2069 | ha->flash_data_off = FARX_ACCESS_FLASH_DATA; | 2070 | ha->flash_data_off = FARX_ACCESS_FLASH_DATA; |
diff --git a/drivers/scsi/qla2xxx/qla_version.h b/drivers/scsi/qla2xxx/qla_version.h index 8edbccb3232d..cf0075a2d0c2 100644 --- a/drivers/scsi/qla2xxx/qla_version.h +++ b/drivers/scsi/qla2xxx/qla_version.h | |||
| @@ -7,9 +7,9 @@ | |||
| 7 | /* | 7 | /* |
| 8 | * Driver version | 8 | * Driver version |
| 9 | */ | 9 | */ |
| 10 | #define QLA2XXX_VERSION "8.03.04-k0" | 10 | #define QLA2XXX_VERSION "8.03.05-k0" |
| 11 | 11 | ||
| 12 | #define QLA_DRIVER_MAJOR_VER 8 | 12 | #define QLA_DRIVER_MAJOR_VER 8 |
| 13 | #define QLA_DRIVER_MINOR_VER 3 | 13 | #define QLA_DRIVER_MINOR_VER 3 |
| 14 | #define QLA_DRIVER_PATCH_VER 4 | 14 | #define QLA_DRIVER_PATCH_VER 5 |
| 15 | #define QLA_DRIVER_BETA_VER 0 | 15 | #define QLA_DRIVER_BETA_VER 0 |
diff --git a/drivers/scsi/scsi_error.c b/drivers/scsi/scsi_error.c index 824b8fc03ce5..30ac116186f5 100644 --- a/drivers/scsi/scsi_error.c +++ b/drivers/scsi/scsi_error.c | |||
| @@ -615,7 +615,7 @@ static int scsi_try_bus_device_reset(struct scsi_cmnd *scmd) | |||
| 615 | return rtn; | 615 | return rtn; |
| 616 | } | 616 | } |
| 617 | 617 | ||
| 618 | static int __scsi_try_to_abort_cmd(struct scsi_cmnd *scmd) | 618 | static int scsi_try_to_abort_cmd(struct scsi_cmnd *scmd) |
| 619 | { | 619 | { |
| 620 | if (!scmd->device->host->hostt->eh_abort_handler) | 620 | if (!scmd->device->host->hostt->eh_abort_handler) |
| 621 | return FAILED; | 621 | return FAILED; |
| @@ -623,31 +623,9 @@ static int __scsi_try_to_abort_cmd(struct scsi_cmnd *scmd) | |||
| 623 | return scmd->device->host->hostt->eh_abort_handler(scmd); | 623 | return scmd->device->host->hostt->eh_abort_handler(scmd); |
| 624 | } | 624 | } |
| 625 | 625 | ||
| 626 | /** | ||
| 627 | * scsi_try_to_abort_cmd - Ask host to abort a running command. | ||
| 628 | * @scmd: SCSI cmd to abort from Lower Level. | ||
| 629 | * | ||
| 630 | * Notes: | ||
| 631 | * This function will not return until the user's completion function | ||
| 632 | * has been called. there is no timeout on this operation. if the | ||
| 633 | * author of the low-level driver wishes this operation to be timed, | ||
| 634 | * they can provide this facility themselves. helper functions in | ||
| 635 | * scsi_error.c can be supplied to make this easier to do. | ||
| 636 | */ | ||
| 637 | static int scsi_try_to_abort_cmd(struct scsi_cmnd *scmd) | ||
| 638 | { | ||
| 639 | /* | ||
| 640 | * scsi_done was called just after the command timed out and before | ||
| 641 | * we had a chance to process it. (db) | ||
| 642 | */ | ||
| 643 | if (scmd->serial_number == 0) | ||
| 644 | return SUCCESS; | ||
| 645 | return __scsi_try_to_abort_cmd(scmd); | ||
| 646 | } | ||
| 647 | |||
| 648 | static void scsi_abort_eh_cmnd(struct scsi_cmnd *scmd) | 626 | static void scsi_abort_eh_cmnd(struct scsi_cmnd *scmd) |
| 649 | { | 627 | { |
| 650 | if (__scsi_try_to_abort_cmd(scmd) != SUCCESS) | 628 | if (scsi_try_to_abort_cmd(scmd) != SUCCESS) |
| 651 | if (scsi_try_bus_device_reset(scmd) != SUCCESS) | 629 | if (scsi_try_bus_device_reset(scmd) != SUCCESS) |
| 652 | if (scsi_try_target_reset(scmd) != SUCCESS) | 630 | if (scsi_try_target_reset(scmd) != SUCCESS) |
| 653 | if (scsi_try_bus_reset(scmd) != SUCCESS) | 631 | if (scsi_try_bus_reset(scmd) != SUCCESS) |
diff --git a/drivers/scsi/scsi_lib.c b/drivers/scsi/scsi_lib.c index eafeeda6e194..5b6bbaea59fe 100644 --- a/drivers/scsi/scsi_lib.c +++ b/drivers/scsi/scsi_lib.c | |||
| @@ -1403,11 +1403,6 @@ static void scsi_softirq_done(struct request *rq) | |||
| 1403 | 1403 | ||
| 1404 | INIT_LIST_HEAD(&cmd->eh_entry); | 1404 | INIT_LIST_HEAD(&cmd->eh_entry); |
| 1405 | 1405 | ||
| 1406 | /* | ||
| 1407 | * Set the serial numbers back to zero | ||
| 1408 | */ | ||
| 1409 | cmd->serial_number = 0; | ||
| 1410 | |||
| 1411 | atomic_inc(&cmd->device->iodone_cnt); | 1406 | atomic_inc(&cmd->device->iodone_cnt); |
| 1412 | if (cmd->result) | 1407 | if (cmd->result) |
| 1413 | atomic_inc(&cmd->device->ioerr_cnt); | 1408 | atomic_inc(&cmd->device->ioerr_cnt); |
