Merge git://git.kernel.org/pub/scm/linux/kernel/git/jejb/scsi-rc-fixes-2.6

* git://git.kernel.org/pub/scm/linux/kernel/git/jejb/scsi-rc-fixes-2.6:
[SCSI] dpt_i2o: fix transferred data length for scsi_set_resid()
[SCSI] scsi_error regression: Fix idempotent command handling
[SCSI] zfcp: Fix hexdump data in s390dbf traces
[SCSI] zfcp: fix erp timeout cleanup for port open requests
[SCSI] zfcp: Wait for port scan to complete when setting adapter online
[SCSI] zfcp: Fix cast warning
[SCSI] zfcp: Fix request list handling in error path
[SCSI] zfcp: fix mempool usage for status_read requests
[SCSI] zfcp: fix req_list_locking.
[SCSI] zfcp: Dont clear reference from SCSI device to unit
[SCSI] qla2xxx: Update version number to 8.02.01-k9.
[SCSI] qla2xxx: Return a FAILED status when abort mailbox-command fails.
[SCSI] qla2xxx: Do not honour max_vports from firmware for 2G ISPs and below.
[SCSI] qla2xxx: Use pci_disable_rom() to manipulate PCI config space.
[SCSI] qla2xxx: Correct Atmel flash-part handling.
[SCSI] megaraid: fix mega_internal_command oops

+67 -99
+2 -1
drivers/s390/scsi/zfcp_aux.c
··· 610 610 atomic_set_mask(status | ZFCP_STATUS_COMMON_REMOVE, &port->status); 611 611 atomic_set(&port->refcount, 0); 612 612 613 - dev_set_name(&port->sysfs_device, "0x%016llx", wwpn); 613 + dev_set_name(&port->sysfs_device, "0x%016llx", 614 + (unsigned long long)wwpn); 614 615 port->sysfs_device.parent = &adapter->ccw_device->dev; 615 616 616 617 port->sysfs_device.release = zfcp_sysfs_port_release;
+3 -1
drivers/s390/scsi/zfcp_ccw.c
··· 116 116 zfcp_erp_adapter_reopen(adapter, ZFCP_STATUS_COMMON_ERP_FAILED, 85, 117 117 NULL); 118 118 zfcp_erp_wait(adapter); 119 - goto out; 119 + up(&zfcp_data.config_sema); 120 + flush_work(&adapter->scan_work); 121 + return 0; 120 122 121 123 out_scsi_register: 122 124 zfcp_erp_thread_kill(adapter);
+16 -26
drivers/s390/scsi/zfcp_dbf.c
··· 30 30 dump->offset = offset; 31 31 dump->size = min(from_len - offset, room); 32 32 memcpy(dump->data, from + offset, dump->size); 33 - debug_event(dbf, level, dump, dump->size); 33 + debug_event(dbf, level, dump, dump->size + sizeof(*dump)); 34 34 } 35 35 } 36 36 ··· 108 108 t.tv_sec, t.tv_nsec); 109 109 zfcp_dbf_out(&p, "cpu", "%02i", entry->id.fields.cpuid); 110 110 } else { 111 - zfcp_dbf_outd(&p, NULL, dump->data, dump->size, dump->offset, 111 + zfcp_dbf_outd(&p, "", dump->data, dump->size, dump->offset, 112 112 dump->total_size); 113 113 if ((dump->offset + dump->size) == dump->total_size) 114 114 p += sprintf(p, "\n"); ··· 366 366 break; 367 367 zfcp_dbf_out(p, "scsi_cmnd", "0x%0Lx", r->u.fcp.cmnd); 368 368 zfcp_dbf_out(p, "scsi_serial", "0x%016Lx", r->u.fcp.serial); 369 + p += sprintf(*p, "\n"); 369 370 break; 370 371 371 372 case FSF_QTCB_OPEN_PORT_WITH_DID: ··· 466 465 else if (strncmp(r->tag, "berr", ZFCP_DBF_TAG_SIZE) == 0) 467 466 zfcp_hba_dbf_view_berr(&p, &r->u.berr); 468 467 469 - p += sprintf(p, "\n"); 468 + if (strncmp(r->tag, "resp", ZFCP_DBF_TAG_SIZE) != 0) 469 + p += sprintf(p, "\n"); 470 470 return p - out_buf; 471 471 } 472 472 ··· 882 880 struct ct_hdr *hdr = sg_virt(ct->req); 883 881 struct zfcp_san_dbf_record *r = &adapter->san_dbf_buf; 884 882 struct zfcp_san_dbf_record_ct_request *oct = &r->u.ct_req; 883 + int level = 3; 885 884 unsigned long flags; 886 885 887 886 spin_lock_irqsave(&adapter->san_dbf_lock, flags); ··· 899 896 oct->options = hdr->options; 900 897 oct->max_res_size = hdr->max_res_size; 901 898 oct->len = min((int)ct->req->length - (int)sizeof(struct ct_hdr), 902 - ZFCP_DBF_CT_PAYLOAD); 903 - memcpy(oct->payload, (void *)hdr + sizeof(struct ct_hdr), oct->len); 904 - debug_event(adapter->san_dbf, 3, r, sizeof(*r)); 899 + ZFCP_DBF_SAN_MAX_PAYLOAD); 900 + debug_event(adapter->san_dbf, level, r, sizeof(*r)); 901 + zfcp_dbf_hexdump(adapter->san_dbf, r, sizeof(*r), level, 902 + (void *)hdr + sizeof(struct ct_hdr), oct->len); 905 903 spin_unlock_irqrestore(&adapter->san_dbf_lock, flags); 906 904 } 907 905 ··· 918 914 struct ct_hdr *hdr = sg_virt(ct->resp); 919 915 struct zfcp_san_dbf_record *r = &adapter->san_dbf_buf; 920 916 struct zfcp_san_dbf_record_ct_response *rct = &r->u.ct_resp; 917 + int level = 3; 921 918 unsigned long flags; 922 919 923 920 spin_lock_irqsave(&adapter->san_dbf_lock, flags); ··· 934 929 rct->expl = hdr->reason_code_expl; 935 930 rct->vendor_unique = hdr->vendor_unique; 936 931 rct->len = min((int)ct->resp->length - (int)sizeof(struct ct_hdr), 937 - ZFCP_DBF_CT_PAYLOAD); 938 - memcpy(rct->payload, (void *)hdr + sizeof(struct ct_hdr), rct->len); 939 - debug_event(adapter->san_dbf, 3, r, sizeof(*r)); 932 + ZFCP_DBF_SAN_MAX_PAYLOAD); 933 + debug_event(adapter->san_dbf, level, r, sizeof(*r)); 934 + zfcp_dbf_hexdump(adapter->san_dbf, r, sizeof(*r), level, 935 + (void *)hdr + sizeof(struct ct_hdr), rct->len); 940 936 spin_unlock_irqrestore(&adapter->san_dbf_lock, flags); 941 937 } 942 938 ··· 960 954 rec->u.els.ls_code = ls_code; 961 955 debug_event(adapter->san_dbf, level, rec, sizeof(*rec)); 962 956 zfcp_dbf_hexdump(adapter->san_dbf, rec, sizeof(*rec), level, 963 - buffer, min(buflen, ZFCP_DBF_ELS_MAX_PAYLOAD)); 957 + buffer, min(buflen, ZFCP_DBF_SAN_MAX_PAYLOAD)); 964 958 spin_unlock_irqrestore(&adapter->san_dbf_lock, flags); 965 959 } 966 960 ··· 1014 1008 char *out_buf, const char *in_buf) 1015 1009 { 1016 1010 struct zfcp_san_dbf_record *r = (struct zfcp_san_dbf_record *)in_buf; 1017 - char *buffer = NULL; 1018 - int buflen = 0, total = 0; 1019 1011 char *p = out_buf; 1020 1012 1021 1013 if (strncmp(r->tag, "dump", ZFCP_DBF_TAG_SIZE) == 0) ··· 1033 1029 zfcp_dbf_out(&p, "gs_subtype", "0x%02x", ct->gs_subtype); 1034 1030 zfcp_dbf_out(&p, "options", "0x%02x", ct->options); 1035 1031 zfcp_dbf_out(&p, "max_res_size", "0x%04x", ct->max_res_size); 1036 - total = ct->len; 1037 - buffer = ct->payload; 1038 - buflen = min(total, ZFCP_DBF_CT_PAYLOAD); 1039 1032 } else if (strncmp(r->tag, "rctc", ZFCP_DBF_TAG_SIZE) == 0) { 1040 1033 struct zfcp_san_dbf_record_ct_response *ct = &r->u.ct_resp; 1041 1034 zfcp_dbf_out(&p, "cmd_rsp_code", "0x%04x", ct->cmd_rsp_code); ··· 1040 1039 zfcp_dbf_out(&p, "reason_code", "0x%02x", ct->reason_code); 1041 1040 zfcp_dbf_out(&p, "reason_code_expl", "0x%02x", ct->expl); 1042 1041 zfcp_dbf_out(&p, "vendor_unique", "0x%02x", ct->vendor_unique); 1043 - total = ct->len; 1044 - buffer = ct->payload; 1045 - buflen = min(total, ZFCP_DBF_CT_PAYLOAD); 1046 1042 } else if (strncmp(r->tag, "oels", ZFCP_DBF_TAG_SIZE) == 0 || 1047 1043 strncmp(r->tag, "rels", ZFCP_DBF_TAG_SIZE) == 0 || 1048 1044 strncmp(r->tag, "iels", ZFCP_DBF_TAG_SIZE) == 0) { 1049 1045 struct zfcp_san_dbf_record_els *els = &r->u.els; 1050 1046 zfcp_dbf_out(&p, "ls_code", "0x%02x", els->ls_code); 1051 - total = els->len; 1052 - buffer = els->payload; 1053 - buflen = min(total, ZFCP_DBF_ELS_PAYLOAD); 1054 1047 } 1055 - 1056 - zfcp_dbf_outd(&p, "payload", buffer, buflen, 0, total); 1057 - if (buflen == total) 1058 - p += sprintf(p, "\n"); 1059 - 1060 1048 return p - out_buf; 1061 1049 } 1062 1050
+2 -6
drivers/s390/scsi/zfcp_dbf.h
··· 163 163 u8 options; 164 164 u16 max_res_size; 165 165 u32 len; 166 - #define ZFCP_DBF_CT_PAYLOAD 24 167 - u8 payload[ZFCP_DBF_CT_PAYLOAD]; 168 166 } __attribute__ ((packed)); 169 167 170 168 struct zfcp_san_dbf_record_ct_response { ··· 172 174 u8 expl; 173 175 u8 vendor_unique; 174 176 u32 len; 175 - u8 payload[ZFCP_DBF_CT_PAYLOAD]; 176 177 } __attribute__ ((packed)); 177 178 178 179 struct zfcp_san_dbf_record_els { 179 180 u8 ls_code; 180 181 u32 len; 181 - #define ZFCP_DBF_ELS_PAYLOAD 32 182 - #define ZFCP_DBF_ELS_MAX_PAYLOAD 1024 183 - u8 payload[ZFCP_DBF_ELS_PAYLOAD]; 184 182 } __attribute__ ((packed)); 185 183 186 184 struct zfcp_san_dbf_record { ··· 190 196 struct zfcp_san_dbf_record_ct_response ct_resp; 191 197 struct zfcp_san_dbf_record_els els; 192 198 } u; 199 + #define ZFCP_DBF_SAN_MAX_PAYLOAD 1024 200 + u8 payload[32]; 193 201 } __attribute__ ((packed)); 194 202 195 203 struct zfcp_scsi_dbf_record {
+1
drivers/s390/scsi/zfcp_erp.c
··· 472 472 ZFCP_STATUS_ERP_TIMEDOUT)) { 473 473 act->fsf_req->status |= ZFCP_STATUS_FSFREQ_DISMISSED; 474 474 zfcp_rec_dbf_event_action(142, act); 475 + act->fsf_req->erp_action = NULL; 475 476 } 476 477 if (act->status & ZFCP_STATUS_ERP_TIMEDOUT) 477 478 zfcp_rec_dbf_event_action(143, act);
+10 -13
drivers/s390/scsi/zfcp_fsf.c
··· 683 683 if (!req) 684 684 return NULL; 685 685 memset(req, 0, sizeof(*req)); 686 + req->pool = pool; 686 687 return req; 687 688 } 688 689 ··· 770 769 static int zfcp_fsf_req_send(struct zfcp_fsf_req *req) 771 770 { 772 771 struct zfcp_adapter *adapter = req->adapter; 773 - struct zfcp_qdio_queue *req_q = &adapter->req_q; 772 + unsigned long flags; 774 773 int idx; 775 774 776 775 /* put allocated FSF request into hash table */ 777 - spin_lock(&adapter->req_list_lock); 776 + spin_lock_irqsave(&adapter->req_list_lock, flags); 778 777 idx = zfcp_reqlist_hash(req->req_id); 779 778 list_add_tail(&req->list, &adapter->req_list[idx]); 780 - spin_unlock(&adapter->req_list_lock); 779 + spin_unlock_irqrestore(&adapter->req_list_lock, flags); 781 780 782 - req->qdio_outb_usage = atomic_read(&req_q->count); 781 + req->qdio_outb_usage = atomic_read(&adapter->req_q.count); 783 782 req->issued = get_clock(); 784 783 if (zfcp_qdio_send(req)) { 785 - /* Queues are down..... */ 786 784 del_timer(&req->timer); 787 - spin_lock(&adapter->req_list_lock); 788 - zfcp_reqlist_remove(adapter, req); 789 - spin_unlock(&adapter->req_list_lock); 790 - /* undo changes in request queue made for this request */ 791 - atomic_add(req->sbal_number, &req_q->count); 792 - req_q->first -= req->sbal_number; 793 - req_q->first += QDIO_MAX_BUFFERS_PER_Q; 794 - req_q->first %= QDIO_MAX_BUFFERS_PER_Q; /* wrap */ 785 + spin_lock_irqsave(&adapter->req_list_lock, flags); 786 + /* lookup request again, list might have changed */ 787 + if (zfcp_reqlist_find_safe(adapter, req)) 788 + zfcp_reqlist_remove(adapter, req); 789 + spin_unlock_irqrestore(&adapter->req_list_lock, flags); 795 790 zfcp_erp_adapter_reopen(adapter, 0, 116, req); 796 791 return -EIO; 797 792 }
+4 -8
drivers/s390/scsi/zfcp_scsi.c
··· 24 24 static void zfcp_scsi_slave_destroy(struct scsi_device *sdpnt) 25 25 { 26 26 struct zfcp_unit *unit = (struct zfcp_unit *) sdpnt->hostdata; 27 - WARN_ON(!unit); 28 - if (unit) { 29 - atomic_clear_mask(ZFCP_STATUS_UNIT_REGISTERED, &unit->status); 30 - sdpnt->hostdata = NULL; 31 - unit->device = NULL; 32 - zfcp_erp_unit_failed(unit, 12, NULL); 33 - zfcp_unit_put(unit); 34 - } 27 + atomic_clear_mask(ZFCP_STATUS_UNIT_REGISTERED, &unit->status); 28 + unit->device = NULL; 29 + zfcp_erp_unit_failed(unit, 12, NULL); 30 + zfcp_unit_put(unit); 35 31 } 36 32 37 33 static int zfcp_scsi_slave_configure(struct scsi_device *sdp)
+2 -2
drivers/scsi/dpt_i2o.c
··· 2445 2445 hba_status = detailed_status >> 8; 2446 2446 2447 2447 // calculate resid for sg 2448 - scsi_set_resid(cmd, scsi_bufflen(cmd) - readl(reply+5)); 2448 + scsi_set_resid(cmd, scsi_bufflen(cmd) - readl(reply+20)); 2449 2449 2450 2450 pHba = (adpt_hba*) cmd->device->host->hostdata[0]; 2451 2451 ··· 2456 2456 case I2O_SCSI_DSC_SUCCESS: 2457 2457 cmd->result = (DID_OK << 16); 2458 2458 // handle underflow 2459 - if(readl(reply+5) < cmd->underflow ) { 2459 + if (readl(reply+20) < cmd->underflow) { 2460 2460 cmd->result = (DID_ERROR <<16); 2461 2461 printk(KERN_WARNING"%s: SCSI CMD underflow\n",pHba->name); 2462 2462 }
+8 -3
drivers/scsi/megaraid.c
··· 4402 4402 scb_t *scb; 4403 4403 int rval; 4404 4404 4405 + scmd = scsi_allocate_command(GFP_KERNEL); 4406 + if (!scmd) 4407 + return -ENOMEM; 4408 + 4405 4409 /* 4406 4410 * The internal commands share one command id and hence are 4407 4411 * serialized. This is so because we want to reserve maximum number of ··· 4416 4412 scb = &adapter->int_scb; 4417 4413 memset(scb, 0, sizeof(scb_t)); 4418 4414 4419 - scmd = &adapter->int_scmd; 4420 - memset(scmd, 0, sizeof(Scsi_Cmnd)); 4421 - 4422 4415 sdev = kzalloc(sizeof(struct scsi_device), GFP_KERNEL); 4423 4416 scmd->device = sdev; 4424 4417 4418 + memset(adapter->int_cdb, 0, sizeof(adapter->int_cdb)); 4419 + scmd->cmnd = adapter->int_cdb; 4425 4420 scmd->device->host = adapter->host; 4426 4421 scmd->host_scribble = (void *)scb; 4427 4422 scmd->cmnd[0] = MEGA_INTERNAL_CMD; ··· 4458 4455 } 4459 4456 4460 4457 mutex_unlock(&adapter->int_mtx); 4458 + 4459 + scsi_free_command(GFP_KERNEL, scmd); 4461 4460 4462 4461 return rval; 4463 4462 }
+1 -1
drivers/scsi/megaraid.h
··· 888 888 889 889 u8 sglen; /* f/w supported scatter-gather list length */ 890 890 891 + unsigned char int_cdb[MAX_COMMAND_SIZE]; 891 892 scb_t int_scb; 892 - Scsi_Cmnd int_scmd; 893 893 struct mutex int_mtx; /* To synchronize the internal 894 894 commands */ 895 895 struct completion int_waitq; /* wait queue for internal
-1
drivers/scsi/qla2xxx/qla_def.h
··· 2547 2547 uint8_t fcode_revision[16]; 2548 2548 uint32_t fw_revision[4]; 2549 2549 2550 - uint16_t fdt_odd_index; 2551 2550 uint32_t fdt_wrt_disable; 2552 2551 uint32_t fdt_erase_cmd; 2553 2552 uint32_t fdt_block_size;
+5 -21
drivers/scsi/qla2xxx/qla_init.c
··· 140 140 qla2100_pci_config(scsi_qla_host_t *ha) 141 141 { 142 142 uint16_t w; 143 - uint32_t d; 144 143 unsigned long flags; 145 144 struct device_reg_2xxx __iomem *reg = &ha->iobase->isp; 146 145 ··· 150 151 w |= (PCI_COMMAND_PARITY | PCI_COMMAND_SERR); 151 152 pci_write_config_word(ha->pdev, PCI_COMMAND, w); 152 153 153 - /* Reset expansion ROM address decode enable */ 154 - pci_read_config_dword(ha->pdev, PCI_ROM_ADDRESS, &d); 155 - d &= ~PCI_ROM_ADDRESS_ENABLE; 156 - pci_write_config_dword(ha->pdev, PCI_ROM_ADDRESS, d); 154 + pci_disable_rom(ha->pdev); 157 155 158 156 /* Get PCI bus information. */ 159 157 spin_lock_irqsave(&ha->hardware_lock, flags); ··· 170 174 qla2300_pci_config(scsi_qla_host_t *ha) 171 175 { 172 176 uint16_t w; 173 - uint32_t d; 174 177 unsigned long flags = 0; 175 178 uint32_t cnt; 176 179 struct device_reg_2xxx __iomem *reg = &ha->iobase->isp; ··· 231 236 232 237 pci_write_config_byte(ha->pdev, PCI_LATENCY_TIMER, 0x80); 233 238 234 - /* Reset expansion ROM address decode enable */ 235 - pci_read_config_dword(ha->pdev, PCI_ROM_ADDRESS, &d); 236 - d &= ~PCI_ROM_ADDRESS_ENABLE; 237 - pci_write_config_dword(ha->pdev, PCI_ROM_ADDRESS, d); 239 + pci_disable_rom(ha->pdev); 238 240 239 241 /* Get PCI bus information. */ 240 242 spin_lock_irqsave(&ha->hardware_lock, flags); ··· 251 259 qla24xx_pci_config(scsi_qla_host_t *ha) 252 260 { 253 261 uint16_t w; 254 - uint32_t d; 255 262 unsigned long flags = 0; 256 263 struct device_reg_24xx __iomem *reg = &ha->iobase->isp24; 257 264 ··· 272 281 if (pci_find_capability(ha->pdev, PCI_CAP_ID_EXP)) 273 282 pcie_set_readrq(ha->pdev, 2048); 274 283 275 - /* Reset expansion ROM address decode enable */ 276 - pci_read_config_dword(ha->pdev, PCI_ROM_ADDRESS, &d); 277 - d &= ~PCI_ROM_ADDRESS_ENABLE; 278 - pci_write_config_dword(ha->pdev, PCI_ROM_ADDRESS, d); 284 + pci_disable_rom(ha->pdev); 279 285 280 286 ha->chip_revision = ha->pdev->revision; 281 287 ··· 294 306 qla25xx_pci_config(scsi_qla_host_t *ha) 295 307 { 296 308 uint16_t w; 297 - uint32_t d; 298 309 299 310 pci_set_master(ha->pdev); 300 311 pci_try_set_mwi(ha->pdev); ··· 307 320 if (pci_find_capability(ha->pdev, PCI_CAP_ID_EXP)) 308 321 pcie_set_readrq(ha->pdev, 2048); 309 322 310 - /* Reset expansion ROM address decode enable */ 311 - pci_read_config_dword(ha->pdev, PCI_ROM_ADDRESS, &d); 312 - d &= ~PCI_ROM_ADDRESS_ENABLE; 313 - pci_write_config_dword(ha->pdev, PCI_ROM_ADDRESS, d); 323 + pci_disable_rom(ha->pdev); 314 324 315 325 ha->chip_revision = ha->pdev->revision; 316 326 ··· 964 980 &ha->fw_minor_version, 965 981 &ha->fw_subminor_version, 966 982 &ha->fw_attributes, &ha->fw_memory_size); 967 - qla2x00_resize_request_q(ha); 968 983 ha->flags.npiv_supported = 0; 969 984 if ((IS_QLA24XX(ha) || IS_QLA25XX(ha) || 970 985 IS_QLA84XX(ha)) && ··· 975 992 ha->max_npiv_vports = 976 993 MIN_MULTI_ID_FABRIC - 1; 977 994 } 995 + qla2x00_resize_request_q(ha); 978 996 979 997 if (ql2xallocfwdump) 980 998 qla2x00_alloc_fw_dump(ha);
+1 -1
drivers/scsi/qla2xxx/qla_mbx.c
··· 1964 1964 *cur_iocb_cnt = mcp->mb[7]; 1965 1965 if (orig_iocb_cnt) 1966 1966 *orig_iocb_cnt = mcp->mb[10]; 1967 - if (max_npiv_vports) 1967 + if (ha->flags.npiv_supported && max_npiv_vports) 1968 1968 *max_npiv_vports = mcp->mb[11]; 1969 1969 } 1970 1970
+1
drivers/scsi/qla2xxx/qla_os.c
··· 728 728 if (ha->isp_ops->abort_command(ha, sp)) { 729 729 DEBUG2(printk("%s(%ld): abort_command " 730 730 "mbx failed.\n", __func__, ha->host_no)); 731 + ret = FAILED; 731 732 } else { 732 733 DEBUG3(printk("%s(%ld): abort_command " 733 734 "mbx success.\n", __func__, ha->host_no));
+7 -12
drivers/scsi/qla2xxx/qla_sup.c
··· 722 722 static void 723 723 qla2xxx_get_fdt_info(scsi_qla_host_t *ha) 724 724 { 725 + #define FLASH_BLK_SIZE_4K 0x1000 725 726 #define FLASH_BLK_SIZE_32K 0x8000 726 727 #define FLASH_BLK_SIZE_64K 0x10000 727 728 const char *loc, *locations[] = { "MID", "FDT" }; ··· 756 755 loc = locations[1]; 757 756 mid = le16_to_cpu(fdt->man_id); 758 757 fid = le16_to_cpu(fdt->id); 759 - ha->fdt_odd_index = mid == 0x1f; 760 758 ha->fdt_wrt_disable = fdt->wrt_disable_bits; 761 759 ha->fdt_erase_cmd = flash_conf_to_access_addr(0x0300 | fdt->erase_cmd); 762 760 ha->fdt_block_size = le32_to_cpu(fdt->block_size); ··· 788 788 ha->fdt_block_size = FLASH_BLK_SIZE_64K; 789 789 break; 790 790 case 0x1f: /* Atmel 26DF081A. */ 791 - ha->fdt_odd_index = 1; 792 - ha->fdt_block_size = FLASH_BLK_SIZE_64K; 791 + ha->fdt_block_size = FLASH_BLK_SIZE_4K; 793 792 ha->fdt_erase_cmd = flash_conf_to_access_addr(0x0320); 794 793 ha->fdt_unprotect_sec_cmd = flash_conf_to_access_addr(0x0339); 795 794 ha->fdt_protect_sec_cmd = flash_conf_to_access_addr(0x0336); ··· 800 801 } 801 802 done: 802 803 DEBUG2(qla_printk(KERN_DEBUG, ha, "FDT[%s]: (0x%x/0x%x) erase=0x%x " 803 - "pro=%x upro=%x idx=%d wrtd=0x%x blk=0x%x.\n", loc, mid, fid, 804 + "pro=%x upro=%x wrtd=0x%x blk=0x%x.\n", loc, mid, fid, 804 805 ha->fdt_erase_cmd, ha->fdt_protect_sec_cmd, 805 - ha->fdt_unprotect_sec_cmd, ha->fdt_odd_index, ha->fdt_wrt_disable, 806 + ha->fdt_unprotect_sec_cmd, ha->fdt_wrt_disable, 806 807 ha->fdt_block_size)); 807 808 } 808 809 ··· 986 987 qla24xx_unprotect_flash(ha); 987 988 988 989 for (liter = 0; liter < dwords; liter++, faddr++, dwptr++) { 989 - if (ha->fdt_odd_index) { 990 - findex = faddr << 2; 991 - fdata = findex & sec_mask; 992 - } else { 993 - findex = faddr; 994 - fdata = (findex & sec_mask) << 2; 995 - } 990 + 991 + findex = faddr; 992 + fdata = (findex & sec_mask) << 2; 996 993 997 994 /* Are we at the beginning of a sector? */ 998 995 if ((findex & rest_addr) == 0) {
+1 -1
drivers/scsi/qla2xxx/qla_version.h
··· 7 7 /* 8 8 * Driver version 9 9 */ 10 - #define QLA2XXX_VERSION "8.02.01-k8" 10 + #define QLA2XXX_VERSION "8.02.01-k9" 11 11 12 12 #define QLA_DRIVER_MAJOR_VER 8 13 13 #define QLA_DRIVER_MINOR_VER 2
+3 -2
drivers/scsi/scsi_error.c
··· 1340 1340 * LLD/transport was disrupted during processing of the IO. 1341 1341 * The transport class is now blocked/blocking, 1342 1342 * and the transport will decide what to do with the IO 1343 - * based on its timers and recovery capablilities. 1343 + * based on its timers and recovery capablilities if 1344 + * there are enough retries. 1344 1345 */ 1345 - return ADD_TO_MLQUEUE; 1346 + goto maybe_retry; 1346 1347 case DID_TRANSPORT_FAILFAST: 1347 1348 /* 1348 1349 * The transport decided to failfast the IO (most likely