diff options
author | James Smart <james.smart@emulex.com> | 2010-02-26 14:13:54 -0500 |
---|---|---|
committer | James Bottomley <James.Bottomley@suse.de> | 2010-03-03 08:38:58 -0500 |
commit | e40a02c12581f710877da372b5d7e15b68a1c5c3 (patch) | |
tree | e26d0d655a8179553fbf05c7efab0da083448377 /drivers/scsi/lpfc | |
parent | 9f1177a3f8eee22427eb97e6e00b62ff0be2871f (diff) |
[SCSI] lpfc 8.3.10: Fix user interface issues
- Add Logging message for critial errors.
- Remove unused variable from lpfc_nodev_tmo_show
- Update supress_link_up parameter with #define values.
Signed-off-by: James Smart <james.smart@emulex.com>
Signed-off-by: James Bottomley <James.Bottomley@suse.de>
Diffstat (limited to 'drivers/scsi/lpfc')
-rw-r--r-- | drivers/scsi/lpfc/lpfc.h | 3 | ||||
-rw-r--r-- | drivers/scsi/lpfc/lpfc_attr.c | 7 | ||||
-rw-r--r-- | drivers/scsi/lpfc/lpfc_els.c | 21 | ||||
-rw-r--r-- | drivers/scsi/lpfc/lpfc_init.c | 4 | ||||
-rw-r--r-- | drivers/scsi/lpfc/lpfc_scsi.c | 14 | ||||
-rw-r--r-- | drivers/scsi/lpfc/lpfc_sli.c | 11 |
6 files changed, 49 insertions, 11 deletions
diff --git a/drivers/scsi/lpfc/lpfc.h b/drivers/scsi/lpfc/lpfc.h index 84b696463a58..ce0599dcc814 100644 --- a/drivers/scsi/lpfc/lpfc.h +++ b/drivers/scsi/lpfc/lpfc.h | |||
@@ -623,6 +623,9 @@ struct lpfc_hba { | |||
623 | uint32_t cfg_log_verbose; | 623 | uint32_t cfg_log_verbose; |
624 | uint32_t cfg_aer_support; | 624 | uint32_t cfg_aer_support; |
625 | uint32_t cfg_suppress_link_up; | 625 | uint32_t cfg_suppress_link_up; |
626 | #define LPFC_INITIALIZE_LINK 0 /* do normal init_link mbox */ | ||
627 | #define LPFC_DELAY_INIT_LINK 1 /* layered driver hold off */ | ||
628 | #define LPFC_DELAY_INIT_LINK_INDEFINITELY 2 /* wait, manual intervention */ | ||
626 | 629 | ||
627 | lpfc_vpd_t vpd; /* vital product data */ | 630 | lpfc_vpd_t vpd; /* vital product data */ |
628 | 631 | ||
diff --git a/drivers/scsi/lpfc/lpfc_attr.c b/drivers/scsi/lpfc/lpfc_attr.c index c992e8328f9e..64cd17eedb64 100644 --- a/drivers/scsi/lpfc/lpfc_attr.c +++ b/drivers/scsi/lpfc/lpfc_attr.c | |||
@@ -1939,7 +1939,9 @@ static DEVICE_ATTR(lpfc_enable_npiv, S_IRUGO, | |||
1939 | # 0x2 = never bring up link | 1939 | # 0x2 = never bring up link |
1940 | # Default value is 0. | 1940 | # Default value is 0. |
1941 | */ | 1941 | */ |
1942 | LPFC_ATTR_R(suppress_link_up, 0, 0, 2, "Suppress Link Up at initialization"); | 1942 | LPFC_ATTR_R(suppress_link_up, LPFC_INITIALIZE_LINK, LPFC_INITIALIZE_LINK, |
1943 | LPFC_DELAY_INIT_LINK_INDEFINITELY, | ||
1944 | "Suppress Link Up at initialization"); | ||
1943 | 1945 | ||
1944 | /* | 1946 | /* |
1945 | # lpfc_nodev_tmo: If set, it will hold all I/O errors on devices that disappear | 1947 | # lpfc_nodev_tmo: If set, it will hold all I/O errors on devices that disappear |
@@ -1966,8 +1968,7 @@ lpfc_nodev_tmo_show(struct device *dev, struct device_attribute *attr, | |||
1966 | { | 1968 | { |
1967 | struct Scsi_Host *shost = class_to_shost(dev); | 1969 | struct Scsi_Host *shost = class_to_shost(dev); |
1968 | struct lpfc_vport *vport = (struct lpfc_vport *) shost->hostdata; | 1970 | struct lpfc_vport *vport = (struct lpfc_vport *) shost->hostdata; |
1969 | int val = 0; | 1971 | |
1970 | val = vport->cfg_devloss_tmo; | ||
1971 | return snprintf(buf, PAGE_SIZE, "%d\n", vport->cfg_devloss_tmo); | 1972 | return snprintf(buf, PAGE_SIZE, "%d\n", vport->cfg_devloss_tmo); |
1972 | } | 1973 | } |
1973 | 1974 | ||
diff --git a/drivers/scsi/lpfc/lpfc_els.c b/drivers/scsi/lpfc/lpfc_els.c index 08b6634cb994..4623323da577 100644 --- a/drivers/scsi/lpfc/lpfc_els.c +++ b/drivers/scsi/lpfc/lpfc_els.c | |||
@@ -806,9 +806,8 @@ lpfc_cmpl_els_flogi(struct lpfc_hba *phba, struct lpfc_iocbq *cmdiocb, | |||
806 | } | 806 | } |
807 | 807 | ||
808 | /* FLOGI failure */ | 808 | /* FLOGI failure */ |
809 | lpfc_printf_vlog(vport, KERN_INFO, LOG_ELS, | 809 | lpfc_printf_vlog(vport, KERN_ERR, LOG_ELS, |
810 | "0100 FLOGI failure Data: x%x x%x " | 810 | "0100 FLOGI failure Status:x%x/x%x TMO:x%x\n", |
811 | "x%x\n", | ||
812 | irsp->ulpStatus, irsp->un.ulpWord[4], | 811 | irsp->ulpStatus, irsp->un.ulpWord[4], |
813 | irsp->ulpTimeout); | 812 | irsp->ulpTimeout); |
814 | goto flogifail; | 813 | goto flogifail; |
@@ -1409,6 +1408,10 @@ lpfc_cmpl_els_plogi(struct lpfc_hba *phba, struct lpfc_iocbq *cmdiocb, | |||
1409 | goto out; | 1408 | goto out; |
1410 | } | 1409 | } |
1411 | /* PLOGI failed */ | 1410 | /* PLOGI failed */ |
1411 | lpfc_printf_vlog(vport, KERN_ERR, LOG_ELS, | ||
1412 | "2753 PLOGI failure DID:%06X Status:x%x/x%x\n", | ||
1413 | ndlp->nlp_DID, irsp->ulpStatus, | ||
1414 | irsp->un.ulpWord[4]); | ||
1412 | /* Do not call DSM for lpfc_els_abort'ed ELS cmds */ | 1415 | /* Do not call DSM for lpfc_els_abort'ed ELS cmds */ |
1413 | if (lpfc_error_lost_link(irsp)) | 1416 | if (lpfc_error_lost_link(irsp)) |
1414 | rc = NLP_STE_FREED_NODE; | 1417 | rc = NLP_STE_FREED_NODE; |
@@ -1577,6 +1580,10 @@ lpfc_cmpl_els_prli(struct lpfc_hba *phba, struct lpfc_iocbq *cmdiocb, | |||
1577 | goto out; | 1580 | goto out; |
1578 | } | 1581 | } |
1579 | /* PRLI failed */ | 1582 | /* PRLI failed */ |
1583 | lpfc_printf_vlog(vport, KERN_ERR, LOG_ELS, | ||
1584 | "2754 PRLI failure DID:%06X Status:x%x/x%x\n", | ||
1585 | ndlp->nlp_DID, irsp->ulpStatus, | ||
1586 | irsp->un.ulpWord[4]); | ||
1580 | /* Do not call DSM for lpfc_els_abort'ed ELS cmds */ | 1587 | /* Do not call DSM for lpfc_els_abort'ed ELS cmds */ |
1581 | if (lpfc_error_lost_link(irsp)) | 1588 | if (lpfc_error_lost_link(irsp)) |
1582 | goto out; | 1589 | goto out; |
@@ -1860,6 +1867,10 @@ lpfc_cmpl_els_adisc(struct lpfc_hba *phba, struct lpfc_iocbq *cmdiocb, | |||
1860 | goto out; | 1867 | goto out; |
1861 | } | 1868 | } |
1862 | /* ADISC failed */ | 1869 | /* ADISC failed */ |
1870 | lpfc_printf_vlog(vport, KERN_ERR, LOG_ELS, | ||
1871 | "2755 ADISC failure DID:%06X Status:x%x/x%x\n", | ||
1872 | ndlp->nlp_DID, irsp->ulpStatus, | ||
1873 | irsp->un.ulpWord[4]); | ||
1863 | /* Do not call DSM for lpfc_els_abort'ed ELS cmds */ | 1874 | /* Do not call DSM for lpfc_els_abort'ed ELS cmds */ |
1864 | if (!lpfc_error_lost_link(irsp)) | 1875 | if (!lpfc_error_lost_link(irsp)) |
1865 | lpfc_disc_state_machine(vport, ndlp, cmdiocb, | 1876 | lpfc_disc_state_machine(vport, ndlp, cmdiocb, |
@@ -2009,6 +2020,10 @@ lpfc_cmpl_els_logo(struct lpfc_hba *phba, struct lpfc_iocbq *cmdiocb, | |||
2009 | /* ELS command is being retried */ | 2020 | /* ELS command is being retried */ |
2010 | goto out; | 2021 | goto out; |
2011 | /* LOGO failed */ | 2022 | /* LOGO failed */ |
2023 | lpfc_printf_vlog(vport, KERN_ERR, LOG_ELS, | ||
2024 | "2756 LOGO failure DID:%06X Status:x%x/x%x\n", | ||
2025 | ndlp->nlp_DID, irsp->ulpStatus, | ||
2026 | irsp->un.ulpWord[4]); | ||
2012 | /* Do not call DSM for lpfc_els_abort'ed ELS cmds */ | 2027 | /* Do not call DSM for lpfc_els_abort'ed ELS cmds */ |
2013 | if (lpfc_error_lost_link(irsp)) | 2028 | if (lpfc_error_lost_link(irsp)) |
2014 | goto out; | 2029 | goto out; |
diff --git a/drivers/scsi/lpfc/lpfc_init.c b/drivers/scsi/lpfc/lpfc_init.c index b64cecafa7ab..437ddc92ebea 100644 --- a/drivers/scsi/lpfc/lpfc_init.c +++ b/drivers/scsi/lpfc/lpfc_init.c | |||
@@ -549,7 +549,7 @@ lpfc_config_port_post(struct lpfc_hba *phba) | |||
549 | mempool_free(pmb, phba->mbox_mem_pool); | 549 | mempool_free(pmb, phba->mbox_mem_pool); |
550 | return -EIO; | 550 | return -EIO; |
551 | } | 551 | } |
552 | } else if (phba->cfg_suppress_link_up == 0) { | 552 | } else if (phba->cfg_suppress_link_up == LPFC_INITIALIZE_LINK) { |
553 | lpfc_init_link(phba, pmb, phba->cfg_topology, | 553 | lpfc_init_link(phba, pmb, phba->cfg_topology, |
554 | phba->cfg_link_speed); | 554 | phba->cfg_link_speed); |
555 | pmb->mbox_cmpl = lpfc_sli_def_mbox_cmpl; | 555 | pmb->mbox_cmpl = lpfc_sli_def_mbox_cmpl; |
@@ -667,7 +667,7 @@ lpfc_hba_init_link(struct lpfc_hba *phba) | |||
667 | mempool_free(pmb, phba->mbox_mem_pool); | 667 | mempool_free(pmb, phba->mbox_mem_pool); |
668 | return -EIO; | 668 | return -EIO; |
669 | } | 669 | } |
670 | phba->cfg_suppress_link_up = 0; | 670 | phba->cfg_suppress_link_up = LPFC_INITIALIZE_LINK; |
671 | 671 | ||
672 | return 0; | 672 | return 0; |
673 | } | 673 | } |
diff --git a/drivers/scsi/lpfc/lpfc_scsi.c b/drivers/scsi/lpfc/lpfc_scsi.c index 7f21b47db791..889a7b9ec92b 100644 --- a/drivers/scsi/lpfc/lpfc_scsi.c +++ b/drivers/scsi/lpfc/lpfc_scsi.c | |||
@@ -2079,8 +2079,7 @@ lpfc_handle_fcp_err(struct lpfc_vport *vport, struct lpfc_scsi_buf *lpfc_cmd, | |||
2079 | 2079 | ||
2080 | if (resp_info & RSP_LEN_VALID) { | 2080 | if (resp_info & RSP_LEN_VALID) { |
2081 | rsplen = be32_to_cpu(fcprsp->rspRspLen); | 2081 | rsplen = be32_to_cpu(fcprsp->rspRspLen); |
2082 | if ((rsplen != 0 && rsplen != 4 && rsplen != 8) || | 2082 | if (rsplen != 0 && rsplen != 4 && rsplen != 8) { |
2083 | (fcprsp->rspInfo3 != RSP_NO_FAILURE)) { | ||
2084 | lpfc_printf_vlog(vport, KERN_ERR, LOG_FCP, | 2083 | lpfc_printf_vlog(vport, KERN_ERR, LOG_FCP, |
2085 | "2719 Invalid response length: " | 2084 | "2719 Invalid response length: " |
2086 | "tgt x%x lun x%x cmnd x%x rsplen x%x\n", | 2085 | "tgt x%x lun x%x cmnd x%x rsplen x%x\n", |
@@ -2090,6 +2089,17 @@ lpfc_handle_fcp_err(struct lpfc_vport *vport, struct lpfc_scsi_buf *lpfc_cmd, | |||
2090 | host_status = DID_ERROR; | 2089 | host_status = DID_ERROR; |
2091 | goto out; | 2090 | goto out; |
2092 | } | 2091 | } |
2092 | if (fcprsp->rspInfo3 != RSP_NO_FAILURE) { | ||
2093 | lpfc_printf_vlog(vport, KERN_ERR, LOG_FCP, | ||
2094 | "2757 Protocol failure detected during " | ||
2095 | "processing of FCP I/O op: " | ||
2096 | "tgt x%x lun x%x cmnd x%x rspInfo3 x%x\n", | ||
2097 | cmnd->device->id, | ||
2098 | cmnd->device->lun, cmnd->cmnd[0], | ||
2099 | fcprsp->rspInfo3); | ||
2100 | host_status = DID_ERROR; | ||
2101 | goto out; | ||
2102 | } | ||
2093 | } | 2103 | } |
2094 | 2104 | ||
2095 | if ((resp_info & SNS_LEN_VALID) && fcprsp->rspSnsLen) { | 2105 | if ((resp_info & SNS_LEN_VALID) && fcprsp->rspSnsLen) { |
diff --git a/drivers/scsi/lpfc/lpfc_sli.c b/drivers/scsi/lpfc/lpfc_sli.c index d51ee7e3273b..49bed3e8c95d 100644 --- a/drivers/scsi/lpfc/lpfc_sli.c +++ b/drivers/scsi/lpfc/lpfc_sli.c | |||
@@ -3091,6 +3091,12 @@ lpfc_sli_brdready_s3(struct lpfc_hba *phba, uint32_t mask) | |||
3091 | 3091 | ||
3092 | /* Check to see if any errors occurred during init */ | 3092 | /* Check to see if any errors occurred during init */ |
3093 | if ((status & HS_FFERM) || (i >= 20)) { | 3093 | if ((status & HS_FFERM) || (i >= 20)) { |
3094 | lpfc_printf_log(phba, KERN_ERR, LOG_INIT, | ||
3095 | "2751 Adapter failed to restart, " | ||
3096 | "status reg x%x, FW Data: A8 x%x AC x%x\n", | ||
3097 | status, | ||
3098 | readl(phba->MBslimaddr + 0xa8), | ||
3099 | readl(phba->MBslimaddr + 0xac)); | ||
3094 | phba->link_state = LPFC_HBA_ERROR; | 3100 | phba->link_state = LPFC_HBA_ERROR; |
3095 | retval = 1; | 3101 | retval = 1; |
3096 | } | 3102 | } |
@@ -3278,6 +3284,9 @@ lpfc_sli_brdkill(struct lpfc_hba *phba) | |||
3278 | if (retval != MBX_SUCCESS) { | 3284 | if (retval != MBX_SUCCESS) { |
3279 | if (retval != MBX_BUSY) | 3285 | if (retval != MBX_BUSY) |
3280 | mempool_free(pmb, phba->mbox_mem_pool); | 3286 | mempool_free(pmb, phba->mbox_mem_pool); |
3287 | lpfc_printf_log(phba, KERN_ERR, LOG_SLI, | ||
3288 | "2752 KILL_BOARD command failed retval %d\n", | ||
3289 | retval); | ||
3281 | spin_lock_irq(&phba->hbalock); | 3290 | spin_lock_irq(&phba->hbalock); |
3282 | phba->link_flag &= ~LS_IGNORE_ERATT; | 3291 | phba->link_flag &= ~LS_IGNORE_ERATT; |
3283 | spin_unlock_irq(&phba->hbalock); | 3292 | spin_unlock_irq(&phba->hbalock); |
@@ -4035,7 +4044,7 @@ lpfc_sli_hba_setup(struct lpfc_hba *phba) | |||
4035 | 4044 | ||
4036 | lpfc_sli_hba_setup_error: | 4045 | lpfc_sli_hba_setup_error: |
4037 | phba->link_state = LPFC_HBA_ERROR; | 4046 | phba->link_state = LPFC_HBA_ERROR; |
4038 | lpfc_printf_log(phba, KERN_INFO, LOG_INIT, | 4047 | lpfc_printf_log(phba, KERN_ERR, LOG_INIT, |
4039 | "0445 Firmware initialization failed\n"); | 4048 | "0445 Firmware initialization failed\n"); |
4040 | return rc; | 4049 | return rc; |
4041 | } | 4050 | } |