diff options
author | James Smart <James.Smart@Emulex.Com> | 2006-04-15 11:53:20 -0400 |
---|---|---|
committer | James Bottomley <jejb@mulgrave.il.steeleye.com> | 2006-04-19 20:50:03 -0400 |
commit | 071fbd3de93fdbe059d492e6a0b691e84cf7be68 (patch) | |
tree | 10e5b9b52648adead22b99c751e8a00d0591123b /drivers/scsi | |
parent | 10d4e957e027b96adfed05c3af1d3fd782a242fe (diff) |
[SCSI] lpfc 8.1.5 : Misc small fixes
Contains the following misc fixes:
- Fix build warnings
- Race condition in lpfc_workq_post_event() could corrupt phba->work_list.
- nlp_sid was not being initialized properly
- Fix some RSCN handling during the re-discovery after Link Up event.
Signed-off-by: James Smart <James.Smart@emulex.com>
Signed-off-by: James Bottomley <James.Bottomley@SteelEye.com>
Diffstat (limited to 'drivers/scsi')
-rw-r--r-- | drivers/scsi/lpfc/lpfc_els.c | 2 | ||||
-rw-r--r-- | drivers/scsi/lpfc/lpfc_hbadisc.c | 14 | ||||
-rw-r--r-- | drivers/scsi/lpfc/lpfc_init.c | 2 |
3 files changed, 8 insertions, 10 deletions
diff --git a/drivers/scsi/lpfc/lpfc_els.c b/drivers/scsi/lpfc/lpfc_els.c index 806c337b630b..283b7d824c34 100644 --- a/drivers/scsi/lpfc/lpfc_els.c +++ b/drivers/scsi/lpfc/lpfc_els.c | |||
@@ -2511,7 +2511,7 @@ lpfc_els_rcv_rscn(struct lpfc_hba * phba, | |||
2511 | /* If we are about to begin discovery, just ACC the RSCN. | 2511 | /* If we are about to begin discovery, just ACC the RSCN. |
2512 | * Discovery processing will satisfy it. | 2512 | * Discovery processing will satisfy it. |
2513 | */ | 2513 | */ |
2514 | if (phba->hba_state < LPFC_NS_QRY) { | 2514 | if (phba->hba_state <= LPFC_NS_QRY) { |
2515 | lpfc_els_rsp_acc(phba, ELS_CMD_ACC, cmdiocb, ndlp, NULL, | 2515 | lpfc_els_rsp_acc(phba, ELS_CMD_ACC, cmdiocb, ndlp, NULL, |
2516 | newnode); | 2516 | newnode); |
2517 | return 0; | 2517 | return 0; |
diff --git a/drivers/scsi/lpfc/lpfc_hbadisc.c b/drivers/scsi/lpfc/lpfc_hbadisc.c index 798977de1a66..adb086009ae0 100644 --- a/drivers/scsi/lpfc/lpfc_hbadisc.c +++ b/drivers/scsi/lpfc/lpfc_hbadisc.c | |||
@@ -311,8 +311,8 @@ lpfc_workq_post_event(struct lpfc_hba * phba, void *arg1, void *arg2, | |||
311 | evtp->evt_arg2 = arg2; | 311 | evtp->evt_arg2 = arg2; |
312 | evtp->evt = evt; | 312 | evtp->evt = evt; |
313 | 313 | ||
314 | list_add_tail(&evtp->evt_listp, &phba->work_list); | ||
315 | spin_lock_irq(phba->host->host_lock); | 314 | spin_lock_irq(phba->host->host_lock); |
315 | list_add_tail(&evtp->evt_listp, &phba->work_list); | ||
316 | if (phba->work_wait) | 316 | if (phba->work_wait) |
317 | wake_up(phba->work_wait); | 317 | wake_up(phba->work_wait); |
318 | spin_unlock_irq(phba->host->host_lock); | 318 | spin_unlock_irq(phba->host->host_lock); |
@@ -1071,10 +1071,6 @@ lpfc_register_remote_port(struct lpfc_hba * phba, | |||
1071 | /* initialize static port data */ | 1071 | /* initialize static port data */ |
1072 | rport->maxframe_size = ndlp->nlp_maxframe; | 1072 | rport->maxframe_size = ndlp->nlp_maxframe; |
1073 | rport->supported_classes = ndlp->nlp_class_sup; | 1073 | rport->supported_classes = ndlp->nlp_class_sup; |
1074 | if ((rport->scsi_target_id != -1) && | ||
1075 | (rport->scsi_target_id < MAX_FCP_TARGET)) { | ||
1076 | ndlp->nlp_sid = rport->scsi_target_id; | ||
1077 | } | ||
1078 | rdata = rport->dd_data; | 1074 | rdata = rport->dd_data; |
1079 | rdata->pnode = ndlp; | 1075 | rdata->pnode = ndlp; |
1080 | 1076 | ||
@@ -1087,6 +1083,10 @@ lpfc_register_remote_port(struct lpfc_hba * phba, | |||
1087 | if (rport_ids.roles != FC_RPORT_ROLE_UNKNOWN) | 1083 | if (rport_ids.roles != FC_RPORT_ROLE_UNKNOWN) |
1088 | fc_remote_port_rolechg(rport, rport_ids.roles); | 1084 | fc_remote_port_rolechg(rport, rport_ids.roles); |
1089 | 1085 | ||
1086 | if ((rport->scsi_target_id != -1) && | ||
1087 | (rport->scsi_target_id < MAX_FCP_TARGET)) { | ||
1088 | ndlp->nlp_sid = rport->scsi_target_id; | ||
1089 | } | ||
1090 | 1090 | ||
1091 | return; | 1091 | return; |
1092 | } | 1092 | } |
@@ -1905,10 +1905,8 @@ lpfc_setup_disc_node(struct lpfc_hba * phba, uint32_t did) | |||
1905 | */ | 1905 | */ |
1906 | if (ndlp->nlp_flag & NLP_DELAY_TMO) | 1906 | if (ndlp->nlp_flag & NLP_DELAY_TMO) |
1907 | lpfc_cancel_retry_delay_tmo(phba, ndlp); | 1907 | lpfc_cancel_retry_delay_tmo(phba, ndlp); |
1908 | } else { | 1908 | } else |
1909 | ndlp->nlp_flag &= ~NLP_NPR_2B_DISC; | ||
1910 | ndlp = NULL; | 1909 | ndlp = NULL; |
1911 | } | ||
1912 | } else { | 1910 | } else { |
1913 | flg = ndlp->nlp_flag & NLP_LIST_MASK; | 1911 | flg = ndlp->nlp_flag & NLP_LIST_MASK; |
1914 | if ((flg == NLP_ADISC_LIST) || (flg == NLP_PLOGI_LIST)) | 1912 | if ((flg == NLP_ADISC_LIST) || (flg == NLP_PLOGI_LIST)) |
diff --git a/drivers/scsi/lpfc/lpfc_init.c b/drivers/scsi/lpfc/lpfc_init.c index 1b16ca0f5007..908d0f27706f 100644 --- a/drivers/scsi/lpfc/lpfc_init.c +++ b/drivers/scsi/lpfc/lpfc_init.c | |||
@@ -795,7 +795,7 @@ lpfc_get_hba_model_desc(struct lpfc_hba * phba, uint8_t * mdp, uint8_t * descp) | |||
795 | int max_speed; | 795 | int max_speed; |
796 | char * ports; | 796 | char * ports; |
797 | char * bus; | 797 | char * bus; |
798 | } m; | 798 | } m = {"<Unknown>", 0, "", ""}; |
799 | 799 | ||
800 | pci_read_config_byte(phba->pcidev, PCI_HEADER_TYPE, &hdrtype); | 800 | pci_read_config_byte(phba->pcidev, PCI_HEADER_TYPE, &hdrtype); |
801 | ports = (hdrtype == 0x80) ? "2-port " : ""; | 801 | ports = (hdrtype == 0x80) ? "2-port " : ""; |