[SCSI] lpfc 8.3.21: RRQ Implementation fixes
[GitHub/mt8127/android_kernel_alcatel_ttab.git] / drivers / scsi / lpfc / lpfc_hbadisc.c
index f9f160ab2ee9184e1623b5a7495b4f377e42df93..63300be2e45bc6d063e387435689ca3e785b25d0 100644 (file)
@@ -2852,7 +2852,7 @@ lpfc_mbx_process_link_up(struct lpfc_hba *phba, struct lpfc_mbx_read_top *la)
                        if (unlikely(!fcf_record)) {
                                lpfc_printf_log(phba, KERN_ERR,
                                        LOG_MBOX | LOG_SLI,
-                                       "2554 Could not allocate memmory for "
+                                       "2554 Could not allocate memory for "
                                        "fcf record\n");
                                rc = -ENODEV;
                                goto out;
@@ -3160,7 +3160,7 @@ lpfc_mbx_cmpl_unreg_vpi(struct lpfc_hba *phba, LPFC_MBOXQ_t *pmb)
        spin_unlock_irq(shost->host_lock);
        vport->unreg_vpi_cmpl = VPORT_OK;
        mempool_free(pmb, phba->mbox_mem_pool);
-       lpfc_cleanup_vports_rrqs(vport);
+       lpfc_cleanup_vports_rrqs(vport, NULL);
        /*
         * This shost reference might have been taken at the beginning of
         * lpfc_vport_delete()
@@ -3900,6 +3900,8 @@ lpfc_drop_node(struct lpfc_vport *vport, struct lpfc_nodelist *ndlp)
        if (ndlp->nlp_state == NLP_STE_UNUSED_NODE)
                return;
        lpfc_nlp_set_state(vport, ndlp, NLP_STE_UNUSED_NODE);
+       if (vport->phba->sli_rev == LPFC_SLI_REV4)
+               lpfc_cleanup_vports_rrqs(vport, ndlp);
        lpfc_nlp_put(ndlp);
        return;
 }
@@ -4289,7 +4291,7 @@ lpfc_cleanup_node(struct lpfc_vport *vport, struct lpfc_nodelist *ndlp)
 
        list_del_init(&ndlp->els_retry_evt.evt_listp);
        list_del_init(&ndlp->dev_loss_evt.evt_listp);
-
+       lpfc_cleanup_vports_rrqs(vport, ndlp);
        lpfc_unreg_rpi(vport, ndlp);
 
        return 0;
@@ -4426,10 +4428,11 @@ lpfc_findnode_did(struct lpfc_vport *vport, uint32_t did)
 {
        struct Scsi_Host *shost = lpfc_shost_from_vport(vport);
        struct lpfc_nodelist *ndlp;
+       unsigned long iflags;
 
-       spin_lock_irq(shost->host_lock);
+       spin_lock_irqsave(shost->host_lock, iflags);
        ndlp = __lpfc_findnode_did(vport, did);
-       spin_unlock_irq(shost->host_lock);
+       spin_unlock_irqrestore(shost->host_lock, iflags);
        return ndlp;
 }