aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/scsi/lpfc/lpfc_sli.c
diff options
context:
space:
mode:
authorJames Smart <james.smart@emulex.com>2010-07-14 15:30:54 -0400
committerJames Bottomley <James.Bottomley@suse.de>2010-07-28 10:05:40 -0400
commit589a52d6a97e01c5ff6c244ee6c8ea57726c610f (patch)
treec8df31220d1b46c792552cd04fe4697a12af139d /drivers/scsi/lpfc/lpfc_sli.c
parent75576bb9b208d7c66822f310cdef9ca2d72c879c (diff)
[SCSI] lpfc 8.3.15: BSG, Discovery, and Misc fixes
- BSG interface related: - Fix node reference count if node is active - Warn if we're overwriting an active CT context - Discovery related: - Clear "Ignore Reg Login" flag when purging mailbox queue - Pay attention to return code for fc_block_scsi_eh() - Stall device loss code if we're almost done when it fires (we're logged in, but PRLI is outstanding) - Bugs - Correct DIF code for endianness issues - Correct where we had missed points to check txq on i/o completion/cleanup Signed-off-by: Alex Iannicelli <alex.iannicelli@emulex.com> Signed-off-by: James Smart <james.smart@emulex.com> Signed-off-by: James Bottomley <James.Bottomley@suse.de>
Diffstat (limited to 'drivers/scsi/lpfc/lpfc_sli.c')
-rw-r--r--drivers/scsi/lpfc/lpfc_sli.c20
1 files changed, 8 insertions, 12 deletions
diff --git a/drivers/scsi/lpfc/lpfc_sli.c b/drivers/scsi/lpfc/lpfc_sli.c
index 7ddf52682271..086f95261605 100644
--- a/drivers/scsi/lpfc/lpfc_sli.c
+++ b/drivers/scsi/lpfc/lpfc_sli.c
@@ -601,15 +601,8 @@ __lpfc_sli_release_iocbq_s4(struct lpfc_hba *phba, struct lpfc_iocbq *iocbq)
601 list_add(&sglq->list, &phba->sli4_hba.lpfc_sgl_list); 601 list_add(&sglq->list, &phba->sli4_hba.lpfc_sgl_list);
602 602
603 /* Check if TXQ queue needs to be serviced */ 603 /* Check if TXQ queue needs to be serviced */
604 if (pring->txq_cnt) { 604 if (pring->txq_cnt)
605 spin_lock_irqsave(
606 &phba->pport->work_port_lock, iflag);
607 phba->pport->work_port_events |=
608 WORKER_SERVICE_TXQ;
609 lpfc_worker_wake_up(phba); 605 lpfc_worker_wake_up(phba);
610 spin_unlock_irqrestore(
611 &phba->pport->work_port_lock, iflag);
612 }
613 } 606 }
614 } 607 }
615 608
@@ -12757,6 +12750,7 @@ lpfc_cleanup_pending_mbox(struct lpfc_vport *vport)
12757 LPFC_MBOXQ_t *mb, *nextmb; 12750 LPFC_MBOXQ_t *mb, *nextmb;
12758 struct lpfc_dmabuf *mp; 12751 struct lpfc_dmabuf *mp;
12759 struct lpfc_nodelist *ndlp; 12752 struct lpfc_nodelist *ndlp;
12753 struct Scsi_Host *shost = lpfc_shost_from_vport(vport);
12760 12754
12761 spin_lock_irq(&phba->hbalock); 12755 spin_lock_irq(&phba->hbalock);
12762 list_for_each_entry_safe(mb, nextmb, &phba->sli.mboxq, list) { 12756 list_for_each_entry_safe(mb, nextmb, &phba->sli.mboxq, list) {
@@ -12778,6 +12772,9 @@ lpfc_cleanup_pending_mbox(struct lpfc_vport *vport)
12778 } 12772 }
12779 ndlp = (struct lpfc_nodelist *) mb->context2; 12773 ndlp = (struct lpfc_nodelist *) mb->context2;
12780 if (ndlp) { 12774 if (ndlp) {
12775 spin_lock_irq(shost->host_lock);
12776 ndlp->nlp_flag &= ~NLP_IGNR_REG_CMPL;
12777 spin_unlock_irq(shost->host_lock);
12781 lpfc_nlp_put(ndlp); 12778 lpfc_nlp_put(ndlp);
12782 mb->context2 = NULL; 12779 mb->context2 = NULL;
12783 } 12780 }
@@ -12793,6 +12790,9 @@ lpfc_cleanup_pending_mbox(struct lpfc_vport *vport)
12793 if (mb->u.mb.mbxCommand == MBX_REG_LOGIN64) { 12790 if (mb->u.mb.mbxCommand == MBX_REG_LOGIN64) {
12794 ndlp = (struct lpfc_nodelist *) mb->context2; 12791 ndlp = (struct lpfc_nodelist *) mb->context2;
12795 if (ndlp) { 12792 if (ndlp) {
12793 spin_lock_irq(shost->host_lock);
12794 ndlp->nlp_flag &= ~NLP_IGNR_REG_CMPL;
12795 spin_unlock_irq(shost->host_lock);
12796 lpfc_nlp_put(ndlp); 12796 lpfc_nlp_put(ndlp);
12797 mb->context2 = NULL; 12797 mb->context2 = NULL;
12798 } 12798 }
@@ -12879,10 +12879,6 @@ lpfc_drain_txq(struct lpfc_hba *phba)
12879 spin_unlock_irqrestore(&phba->hbalock, iflags); 12879 spin_unlock_irqrestore(&phba->hbalock, iflags);
12880 } 12880 }
12881 12881
12882 spin_lock_irqsave(&phba->pport->work_port_lock, iflags);
12883 phba->pport->work_port_events &= ~WORKER_SERVICE_TXQ;
12884 spin_unlock_irqrestore(&phba->pport->work_port_lock, iflags);
12885
12886 /* Cancel all the IOCBs that cannot be issued */ 12882 /* Cancel all the IOCBs that cannot be issued */
12887 lpfc_sli_cancel_iocbs(phba, &completions, IOSTAT_LOCAL_REJECT, 12883 lpfc_sli_cancel_iocbs(phba, &completions, IOSTAT_LOCAL_REJECT,
12888 IOERR_SLI_ABORTED); 12884 IOERR_SLI_ABORTED);