• J
    scsi: lpfc: Fix hang on unload due to stuck fport node · 88f77029
    James Smart 提交于
    A test scenario encountered an unload hang while an FLOGI ELS was in flight
    when a link down condition occurred.  The driver fails unload as it never
    releases the fport node.
    
    For most nodes, when the link drops, devloss tmo is started and the timeout
    will cause the final node release. For the Fport, as it has not yet
    registered with the SCSI transport, there is no devloss timer to be
    started, so there is no final release.  Additionally, the link down
    sequence causes ABORTS to be issued for pending ELS's. The completions from
    the ABORTS perform the release of node references.  However, as the adapter
    is being reset to be unloaded, those completions will never occur.
    
    Fix by the following:
    
     - In the ELS cleanup, recognize when unloading and place the ELS's on a
       different list that immediately cleans up/completes the ELS's.  It's
       recognized that this condition primarily affects only the fport, with
       other ports having normal clean up logic that handles things.
    
     - Resolve the devloss issue by, when cleaning up nodes on after link down,
       recognizing when the fabric node does not have a completed state (its
       state is UNUSED) and removing a reference so the node can delete after
       the ELS reference is released.
    
    Link: https://lore.kernel.org/r/20210910233159.115896-5-jsmart2021@gmail.comCo-developed-by: NJustin Tee <justin.tee@broadcom.com>
    Signed-off-by: NJustin Tee <justin.tee@broadcom.com>
    Signed-off-by: NJames Smart <jsmart2021@gmail.com>
    Signed-off-by: NMartin K. Petersen <martin.petersen@oracle.com>
    88f77029
lpfc_els.c 363.3 KB