Message ID | 555f405d.19aP4Ju4SItrRE4D%james.smart@avagotech.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
James Smart wrote: > > Devices are not discovered during takeaway/giveback testing > > When a remote nport changes it's DID, a new ndlp is used. its > However, we left the old ndlp state unchanged and still in > a discovery state. The may stall discovery resulting in some The? > devices not being discovered. Correct by swapping the state two spaces > of the 2 ndlp's when a DID swap is detected. Sebastian -- To unsubscribe from this list: send the line "unsubscribe linux-scsi" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
On 05/22/2015 04:42 PM, James Smart wrote: > > Devices are not discovered during takeaway/giveback testing > > When a remote nport changes it's DID, a new ndlp is used. > However, we left the old ndlp state unchanged and still in > a discovery state. The may stall discovery resulting in some > devices not being discovered. Correct by swapping the state > of the 2 ndlp's when a DID swap is detected. > > Signed-off-by: Dick Kennedy <dick.kennedy@avagotech.com> > Signed-off-by: James Smart <james.smart@avagotech.com> > --- Reviewed-by: Hannes Reinecke <hare@suse.de> Cheers, Hannes
uh - we're flagging issues with in a patch explanation (such as 2 spaces after a period) and not something in the patch itself ?? I'm not going to revise patches for minor typos or styles disagreements in patch descriptions. -- james On 5/24/2015 3:56 PM, Sebastian Herbszt wrote: > James Smart wrote: >> Devices are not discovered during takeaway/giveback testing >> >> When a remote nport changes it's DID, a new ndlp is used. > its > >> However, we left the old ndlp state unchanged and still in >> a discovery state. The may stall discovery resulting in some > The? > >> devices not being discovered. Correct by swapping the state > two spaces > >> of the 2 ndlp's when a DID swap is detected. > Sebastian -- To unsubscribe from this list: send the line "unsubscribe linux-scsi" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
diff --git a/drivers/scsi/lpfc/lpfc_els.c b/drivers/scsi/lpfc/lpfc_els.c index 30021f3..21c4a3d 100644 --- a/drivers/scsi/lpfc/lpfc_els.c +++ b/drivers/scsi/lpfc/lpfc_els.c @@ -1509,12 +1509,14 @@ lpfc_plogi_confirm_nport(struct lpfc_hba *phba, uint32_t *prsp, struct lpfc_nodelist *ndlp) { struct lpfc_vport *vport = ndlp->vport; + struct Scsi_Host *shost = lpfc_shost_from_vport(vport); struct lpfc_nodelist *new_ndlp; struct lpfc_rport_data *rdata; struct fc_rport *rport; struct serv_parm *sp; uint8_t name[sizeof(struct lpfc_name)]; uint32_t rc, keepDID = 0, keep_nlp_flag = 0; + uint16_t keep_nlp_state; int put_node; int put_rport; unsigned long *active_rrqs_xri_bitmap = NULL; @@ -1603,11 +1605,14 @@ lpfc_plogi_confirm_nport(struct lpfc_hba *phba, uint32_t *prsp, ndlp->active_rrqs_xri_bitmap, phba->cfg_rrq_xri_bitmap_sz); + spin_lock_irq(shost->host_lock); keep_nlp_flag = new_ndlp->nlp_flag; new_ndlp->nlp_flag = ndlp->nlp_flag; ndlp->nlp_flag = keep_nlp_flag; + spin_unlock_irq(shost->host_lock); - /* Set state will put new_ndlp on to node list if not already done */ + /* Set nlp_states accordingly */ + keep_nlp_state = new_ndlp->nlp_state; lpfc_nlp_set_state(vport, new_ndlp, ndlp->nlp_state); /* Move this back to NPR state */ @@ -1668,20 +1673,13 @@ lpfc_plogi_confirm_nport(struct lpfc_hba *phba, uint32_t *prsp, active_rrqs_xri_bitmap, phba->cfg_rrq_xri_bitmap_sz); - /* Since we are swapping the ndlp passed in with the new one - * and the did has already been swapped, copy over state. - * The new WWNs are already in new_ndlp since thats what - * we looked it up by in the begining of this routine. - */ - new_ndlp->nlp_state = ndlp->nlp_state; - - /* Since we are switching over to the new_ndlp, the old - * ndlp should be put in the NPR state, unless we have - * already started re-discovery on it. + /* Since we are switching over to the new_ndlp, + * reset the old ndlp state */ if ((ndlp->nlp_state == NLP_STE_UNMAPPED_NODE) || (ndlp->nlp_state == NLP_STE_MAPPED_NODE)) - lpfc_nlp_set_state(vport, ndlp, NLP_STE_NPR_NODE); + keep_nlp_state = NLP_STE_NPR_NODE; + lpfc_nlp_set_state(vport, ndlp, keep_nlp_state); /* Fix up the rport accordingly */ rport = ndlp->rport;