]> www.infradead.org Git - users/jedix/linux-maple.git/commitdiff
scsi: lpfc: Fix rediscovery on switch blade pull
authorDick Kennedy <dick.kennedy@broadcom.com>
Wed, 23 Aug 2017 23:55:32 +0000 (16:55 -0700)
committerJack Vogel <jack.vogel@oracle.com>
Thu, 8 Mar 2018 04:25:03 +0000 (20:25 -0800)
Orabug: 27631736

When the switch blade is pulled out then plugged back in, the driver
does not issue a PLOGI to the target

When the switch blade is pulled out, it does not reset the link. The
driver ends up issuing a LOGO to the target, and finally sees devloss.
Since the driver believes that a LOGO is outstanding, it does not issue
a PLOGI to the target upon link up

Correct by placing the ndlp in UNUSED state When devloss happens in
LOGO_ISSUE state.

Signed-off-by: Dick Kennedy <dick.kennedy@broadcom.com>
Signed-off-by: James Smart <james.smart@broadcom.com>
Reviewed-by: Johannes Thumshirn <jthumshirn@suse.de>
Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
(cherry picked from commit d2aa48761e4f102b672e9ff1b6c8d26af782b286)
Signed-off-by: Dick dkennedy <dick.kennedy@broadcom.com>
Signed-off-by: Dan Duval <dan.duval@oracle.com>
Reviewed-by: Jack Vogel <jack.vogel@oracle.com>
drivers/scsi/lpfc/lpfc_nportdisc.c

index ba908a740d43d0e28d5e090a35e7d601e17c04d3..b81c65debf89d62f4f1c18ea166798aaa39c1d37 100644 (file)
@@ -1967,12 +1967,15 @@ lpfc_device_rm_logo_issue(struct lpfc_vport *vport, struct lpfc_nodelist *ndlp,
                          void *arg, uint32_t evt)
 {
        /*
-        * Take no action.  If a LOGO is outstanding, then possibly DevLoss has
-        * timed out and is calling for Device Remove.  In this case, the LOGO
-        * must be allowed to complete in state LOGO_ISSUE so that the rpi
-        * and other NLP flags are correctly cleaned up.
+        * DevLoss has timed out and is calling for Device Remove.
+        * In this case, abort the LOGO and cleanup the ndlp
         */
-       return ndlp->nlp_state;
+
+       lpfc_unreg_rpi(vport, ndlp);
+       /* software abort outstanding PLOGI */
+       lpfc_els_abort(vport->phba, ndlp);
+       lpfc_drop_node(vport, ndlp);
+       return NLP_STE_FREED_NODE;
 }
 
 static uint32_t