--- ./source/private_module/SRC/tsdk/src/fclgnfc2.c	2020-11-10 04:01:34.078501375 +0000
+++ ./source/private_module/SRC/tsdk/src/fclgnfc2.c.hotpatch	2021-03-04 04:11:52.622501375 +0000
@@ -206,7 +206,7 @@
             return NULL;
         }
 		/*DTS2017122903444 ԽHDSPLOGI*/
-		if (fcLgn->plogiRjtretryCnt) 
+		//if (fcLgn->plogiRjtretryCnt) 
 		{
 			return fiFc2StatePlogi; 		
 		}
@@ -215,19 +215,19 @@
         /* link is up, we can try sending a plogi */
         //fmTraceFuncExit(hpDBG_VERY_LOUD, 'b', "ez");
         //return fiFc2StatePlogi;
-        if(fcLgn->retryCount <= FC_TACHYON_DEFAULT_PLOGI_RETRY_COUNT)
-        {
-            fcLgn->retryCount++;
 
-            /* link is up, we can try sending a plogi */
-            fmTraceFuncExit(hpDBG_VERY_LOUD, 'b', "ez");
-            return fiFc2StatePlogi;
-        }
-        else
-        {
-            fmTraceFuncExit(hpDBG_VERY_LOUD, 'c', "ez");
-            return fiFc2StateClosing;
-        }
+
+
+
+
+
+
+
+
+
+
+
+
         /* 2012-10-09 l90005855 for BG9D05800 end */
     case FC_FC2_E_CLOSE:
         /* We can go to the closing state. */
@@ -2738,22 +2738,24 @@
 
     fcPort = (fcPort_t *) hpRoot->fcData;
     /* P11G-1429 fengyun 2010-12-31 end */
-
     fmTraceFuncEnter(hpDBG_VERY_LOUD, "cy");
 
     fmTrace(hpDBG_VERY_LOUD,"ck",rspFlags );
     /* TP:ck  rspFlags */
-
     if (NULL == fcPort)
     {
         tsdkTrace(hpRoot, "fcPort is null");
         /*TRUEIO*/
         return (TRUE);
     }
-
     fcLgn = fcExch->fc2Lgn;
     fcLgn->fcExch = NULL;
-
+    
+    if (NULL == fcLgn->fcPortal)
+    {
+        tsdkTrace(hpRoot, "FcLgn(0x%llx) has been released.", fcLgn);
+        return (TRUE);
+    }
     if (rspFlags & FC_SFS_RSP_TIMEOUT)
     {
         /* Timeout occured, tell the OS layer then call the state machine.  The state
@@ -2767,14 +2769,11 @@
 		fcLgn->plogiRjtretryCnt = 0;
 
         /* 2016-08-08 mWX366968 for DTS2013091208518  begin:½FASӦʧ*/
-        if(fcLgn->retryCount <= FC_TACHYON_DEFAULT_PLOGI_RETRY_COUNT)
+        //if(fcLgn->retryCount <= FC_TACHYON_DEFAULT_PLOGI_RETRY_COUNT)
         {
             fcLgn->retryCount++;
             fiFc2LgnStateMachine(hpRoot, fcLgn, FC_FC2_E_ENTER);
-        }
-        else
-        {
-            fiFc2LgnError(hpRoot, fcLgn, osFCLgnErrLoginFail);
+
         }
         /* 2016-08-08 mWX366968 for DTS2013091208518  end */
         fmTraceFuncExit(hpDBG_VERY_LOUD, 'a', "cy");
@@ -2993,6 +2992,7 @@
  * @return fcRcFailure
  *
  */
+ 
 LOCAL bit32 fiFc2SendPlogiAcc(hpRoot_t *hpRoot, fcLgn_t *fcLgn)
 {
     fcPort_t           *fcPort;
--- ./source/private_module/SRC/mstore/common/pmfc_tdlgn.c	2020-11-10 04:01:33.702501375 +0000
+++ ./source/private_module/SRC/mstore/common/pmfc_tdlgn.c.hotpatch	2021-03-03 07:50:57.358501375 +0000
@@ -94,7 +94,7 @@
 /*----------------------------------------------*
  * ڲԭ˵                             *
  *----------------------------------------------*/
-
+OSP_VOID PMFC_TDDevEventLoginSuccessPatch(hpRoot_t   *hpRoot, tdDeviceData_t  *DeviceData);
 /*----------------------------------------------*
  * ȫֱ                                     *
  *----------------------------------------------*/
@@ -1345,7 +1345,7 @@
             break;
 
         case DevEventLoginSuccess:
-            PMFC_TDDevEventLoginSuccess(hpRoot, DeviceData);
+            PMFC_TDDevEventLoginSuccessPatch(hpRoot, DeviceData);
             break;
 
         case DevEventLoginClose:
@@ -1950,7 +1950,7 @@
             break;
 
         case DevEventLoginSuccess:
-            PMFC_TDDevEventLoginSuccess(hpRoot, DeviceData);
+            PMFC_TDDevEventLoginSuccessPatch(hpRoot, DeviceData);
             break;
 
         case DevEventLoginClose:
@@ -3374,4 +3374,148 @@
     return (0);
 } /* tdosLgnCB */
 
+OSP_VOID PMFC_TDDevEventLoginSuccessPatch(hpRoot_t   *hpRoot, tdDeviceData_t  *DeviceData)
+{
+    HBAHost_t *pstHba = (HBAHost_t *)hpRoot->osData;
+    tdPortalData_t *tdPortalData = &(pstHba->stPortalData);
+    /* BEGIN: Added by KF49511, 2013/8/16   PN:P12V-2387*/
+    fcRptFtPara_t fcRPortPara;
+    /* END:   Added by KF49511, 2013/8/16 */
+    OSP_BOOL bNeedFc2LgnTimer = FALSE;
+
+    DeviceData->ComDevBlk.State = DevStateLoginReady;
+        
+    if (FALSE == DeviceData->ucNotHandFlag)
+    {
+        tsdkTrace(hpRoot,
+                "fc2OSlgn(0x%p) fc2lgn(0x%p) lgntime:%p mode(%d) rmode(%d)",
+                DeviceData,
+                DeviceData->ComDevBlk.fcLgnHandle,
+                &(DeviceData->ComDevBlk.fcloginTimer.Lgntimer),
+                pstHba->uiPortMode,
+                DeviceData->ComDevBlk.uiRemotePortMode);
+    }
+
+    PMFC_DeleteTimer(&(DeviceData->ComDevBlk.fcloginTimer.Lgntimer));
+
+    if (osRcSuccess != fcLgnGetInfo(
+                                    DeviceData->ComDevBlk.hpRoot,
+                                    DeviceData->ComDevBlk.fcLgnHandle,
+                                    &DeviceData->ComDevBlk.fcLgnInfo)
+                                    )
+    {
+        PMFC_TRACE(0x180f,OSP_DBL_MINOR, "Exit FUNC.");
+        return;
+    }
+
+    /*
+    * our NPortID might have changed
+    */
+    if (DeviceData->ComDevBlk.NPortID != DeviceData->ComDevBlk.fcLgnInfo.NPortID)
+    {
+        tdDeviceDataSetQualifier(hpRoot,DeviceData);
+    }
+
+    /*
+    * now populate DeviceInfo
+    */
+    osti_memcpy(DeviceData->DeviceInfo.RemoteNodeWWN,
+    DeviceData->ComDevBlk.fcLgnInfo.NodeName, WWN_LENGTH);
+
+    osti_memcpy(DeviceData->DeviceInfo.RemotePortWWN,
+    DeviceData->ComDevBlk.fcLgnInfo.PortName, WWN_LENGTH);
+
+    DeviceData->DeviceInfo.RemoteNPortID
+        = DeviceData->ComDevBlk.fcLgnInfo.NPortID;
+
+    DeviceData->DeviceInfo.LocalNPortID
+        = DeviceData->ComDevBlk.fcLgnInfo.PortalNPortID;
+
+    /*ֹ̬鲻ͨ*/
+    memset(&fcRPortPara, 0, sizeof(fcRPortPara));
+
+    if ((pstHba->uiPortMode & TADRV_INITIATOR) 
+        && (PMFC_REMOTE_INI_ONLY != DeviceData->ComDevBlk.uiRemotePortMode))
+    {
+        /* 2㽨úͬ4㲻Ҫ̷prliȴһʱ䡣
+        Զ˷prliĲǴiniɾprliĶʱ
+        inilogin. */
+        if ((IS_ONLYINI_PORT(pstHba->uiPortMode))||(IS_MIRROR_PORT(pstHba)))
+        {
+            PMFC_TDDevDoLogin(hpRoot,DeviceData);           
+        }
+        else
+        {
+            PMFC_DeleteTimer(&(DeviceData->ComDevBlk.inifc4loginDelayTimer.Lgntimer));
+
+            /*A11D02585 2010-11-19 fengyun begin: ȺjiffiesѾıܴjiffies ǷҪӣڷװ*/
+            /* BEGIN: Added by KF49511, 2013/8/16   PN:P12V-2387*/
+            /*˾ͬڻʱPlogi֮2.1Timer֪Զ˶
+              TGTԣӦ̷Prli*/
+
+            /*
+            if( PORTFT_FIND_RESULT_WWN 
+                == PF_PortFtListFind(DeviceData->ComDevBlk.fcLgnInfo.PortName, PORTFT_STATUS_ONLINE, &fcRPortFt) )
+                */
+            memcpy(fcRPortPara.RemoteWWPN, DeviceData->ComDevBlk.fcLgnInfo.PortName, sizeof(fcRPortPara.RemoteWWPN));
+            fcRPortPara.FC4Feature = FC_FC4_FEATURE_NONE;
+            if ( osRcSuccess == PF_RportFtQuery( hpRoot, &tdPortalData->hpPortalContext, (void *)(&fcRPortPara) ) )
+            {
+                /*Զδ֪ΪTGT,ӡԶ*/
+                if(FC_FC4_FEATURE_NONE == fcRPortPara.FC4Feature)
+                {
+                    tsdkTrace(hpRoot, "RPort(0x%x) fcRPortFt:wwn=%llx FC4Feature=%08x", 
+                                  DeviceData->DeviceInfo.RemoteNPortID,
+                                  *(bit64*)fcRPortPara.RemoteWWPN, fcRPortPara.FC4Feature);
+                }
+                if ( FC_FC4_FEATURE_TGT == (FC_FC4_FEATURE_TGT & fcRPortPara.FC4Feature) )
+                {
+                    PMFC_AddTimer(&(DeviceData->ComDevBlk.inifc4loginDelayTimer.Lgntimer),
+                            itdLoginDelayActive,
+                            (OSP_ULONG)DeviceData,
+                            (OSP_ULONG)(( 1000 * HZ)/1000));
+                 }
+                /*20140321 f00250095 for DTS2014032706947  ֹӽΪֱʱfeature == 0 ʧbegin*/
+                else if(FC_FC4_FEATURE_NONE == fcRPortPara.FC4Feature)
+                {
+                    PMFC_AddTimer(&(DeviceData->ComDevBlk.inifc4loginDelayTimer.Lgntimer),
+                            itdLoginDelayActive,
+                            (OSP_ULONG)DeviceData,
+                            (OSP_ULONG)(( TADRY_INI_FC4LGN_DELAY_TIME * HZ)/1000));
+                }
+                /*20140321 f00250095 for DTS2014032706947 end*/
+
+            }
+            else
+            {
+                PMFC_AddTimer(&(DeviceData->ComDevBlk.inifc4loginDelayTimer.Lgntimer),
+                          itdLoginDelayActive,
+                          (OSP_ULONG)DeviceData,
+                          (OSP_ULONG)(( TADRY_INI_FC4LGN_DELAY_TIME * HZ)/1000));
+            }
+            /* END:   Added by KF49511, 2013/8/16 */
+            /*A11D02585 2010-11-19 fengyun end */
+        }
+    }
+
+    /*20160808 h90006252 for DTS2016080807075 ½FASӦʧ*/
+    bNeedFc2LgnTimer = ((TADRV_TARGET == pstHba->uiPortMode) 
+                         ||(PMFC_REMOTE_INI_ONLY ==DeviceData->ComDevBlk.uiRemotePortMode)
+                         ||(FC_FC4_FEATURE_INI == fcRPortPara.FC4Feature));
+    if(bNeedFc2LgnTimer)
+    {
+        PMFC_AddTimer(&(DeviceData->ComDevBlk.fcloginTimer.Lgntimer),
+            tdLoginReadyTimeout,
+            (OSP_ULONG)DeviceData,
+            (OSP_ULONG)TADRY_FC2LGN_READY_TIMEOUT);
+    }
+    /*20160808 h90006252 for DTS2016080807075 end*/
+
+    tdDevBcstEvent(
+        hpRoot,
+        DeviceData,
+        DevComEventLoginReady,
+        NULL
+        );
+}
 
