diff options
author | James Smart <James.Smart@Emulex.Com> | 2007-04-25 09:52:34 -0400 |
---|---|---|
committer | James Bottomley <jejb@mulgrave.il.steeleye.com> | 2007-05-06 10:33:14 -0400 |
commit | 7054a606e6724674a5acd103ed74eacb02c73393 (patch) | |
tree | 271327c20a1e4bff9475ef7a9d98afd4644d6570 /drivers/scsi/lpfc/lpfc_els.c | |
parent | de0c5b32b50ef2673f4cd434b9c2732237d715dd (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.c | 12 |
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)) { |