aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/scsi/lpfc/lpfc_els.c
diff options
context:
space:
mode:
authorJames Smart <James.Smart@Emulex.Com>2007-04-25 09:52:34 -0400
committerJames Bottomley <jejb@mulgrave.il.steeleye.com>2007-05-06 10:33:14 -0400
commit7054a606e6724674a5acd103ed74eacb02c73393 (patch)
tree271327c20a1e4bff9475ef7a9d98afd4644d6570 /drivers/scsi/lpfc/lpfc_els.c
parentde0c5b32b50ef2673f4cd434b9c2732237d715dd (diff)
[SCSI] lpfc 8.1.12 : Round 2 of Miscellaneous fixes
Round 2 of Miscellaneous fixes: - Ensure we don't prematurely re-enable IRQs in lpfc_sli_abort_fcp_cmpl(). - Prevent freeing of iocb after IOCB_TIMEDOUT error. - Added code to cleanup REG_LOGIN mailbox command when a LOGO is received. - Fix offline window where more work can sneak in after clearing work_ha - Use target reset instead of LU reset in bus_device_reset_handler - Fixed system hangs due to leaked host_lock. - Fixed NULL pointer dereference during I/O with LIP. - Fixed false iocb timeout. - Fixed name server query response handling. - Change rport dev_loss_tmo value when user change lpfc HBA's dev_loss_tmo. - Fixed a memory leak in lpfc_sli_wake_mbox_wait. - Fixed check for dropped frames. - Removed hba queue depth calculation based on device PCI IDs - Change min cr_count value specified in comment to agree with setting Signed-off-by: James Smart <James.Smart@emulex.com> Signed-off-by: James Bottomley <James.Bottomley@SteelEye.com>
Diffstat (limited to 'drivers/scsi/lpfc/lpfc_els.c')
-rw-r--r--drivers/scsi/lpfc/lpfc_els.c12
1 files changed, 8 insertions, 4 deletions
diff --git a/drivers/scsi/lpfc/lpfc_els.c b/drivers/scsi/lpfc/lpfc_els.c
index 14266dfb35db..4d9e7f50c189 100644
--- a/drivers/scsi/lpfc/lpfc_els.c
+++ b/drivers/scsi/lpfc/lpfc_els.c
@@ -3214,7 +3214,7 @@ lpfc_els_timeout_handler(struct lpfc_hba *phba)
3214 IOCB_t *cmd = NULL; 3214 IOCB_t *cmd = NULL;
3215 struct lpfc_dmabuf *pcmd; 3215 struct lpfc_dmabuf *pcmd;
3216 uint32_t *elscmd; 3216 uint32_t *elscmd;
3217 uint32_t els_command; 3217 uint32_t els_command=0;
3218 uint32_t timeout; 3218 uint32_t timeout;
3219 uint32_t remote_ID; 3219 uint32_t remote_ID;
3220 3220
@@ -3233,12 +3233,16 @@ lpfc_els_timeout_handler(struct lpfc_hba *phba)
3233 list_for_each_entry_safe(piocb, tmp_iocb, &pring->txcmplq, list) { 3233 list_for_each_entry_safe(piocb, tmp_iocb, &pring->txcmplq, list) {
3234 cmd = &piocb->iocb; 3234 cmd = &piocb->iocb;
3235 3235
3236 if (piocb->iocb_flag & LPFC_IO_LIBDFC) { 3236 if ((piocb->iocb_flag & LPFC_IO_LIBDFC) ||
3237 (piocb->iocb.ulpCommand == CMD_ABORT_XRI_CN) ||
3238 (piocb->iocb.ulpCommand == CMD_CLOSE_XRI_CN)) {
3237 continue; 3239 continue;
3238 } 3240 }
3239 pcmd = (struct lpfc_dmabuf *) piocb->context2; 3241 pcmd = (struct lpfc_dmabuf *) piocb->context2;
3240 elscmd = (uint32_t *) (pcmd->virt); 3242 if (pcmd) {
3241 els_command = *elscmd; 3243 elscmd = (uint32_t *) (pcmd->virt);
3244 els_command = *elscmd;
3245 }
3242 3246
3243 if ((els_command == ELS_CMD_FARP) 3247 if ((els_command == ELS_CMD_FARP)
3244 || (els_command == ELS_CMD_FARPR)) { 3248 || (els_command == ELS_CMD_FARPR)) {