--- ./source/private_module/standard/scsi_alua_feature.c	2018-04-13 09:03:56.000000000 +0000
+++ ./source/private_module/standard/scsi_alua_feature.c.hotpatch	2020-04-09 07:25:30.000000000 +0000
@@ -921,18 +921,18 @@
 
 bool scsiIsNeedFillOffine(TGT_CMD_S *tgtCmd)
 {
-    if ((SCSI_OS_TYPE_ESX == tgtCmd->uiOsType) || (SCSI_OS_TYPE_AIX == tgtCmd->uiOsType))
+    uint8_t modeType = 0;
+    if ((SCSI_OS_TYPE_ESX == tgtCmd->uiOsType) || (SCSI_OS_TYPE_AIX == tgtCmd->uiOsType)
+        ||(SCSI_OS_TYPE_WIN2012 == tgtCmd->uiOsType) || (SCSI_OS_TYPE_WINDOWS == tgtCmd->uiOsType))
     {
         return B_FALSE;
     }
-
-    if ((SCSI_OS_TYPE_WIN2012 == tgtCmd->uiOsType) || (SCSI_OS_TYPE_WINDOWS == tgtCmd->uiOsType))
+    modeType = scsiGetAluaModeType(tgtCmd);
+    if ((SCSI_ALUA_MODE_TYPE4 == modeType) || (SCSI_ALUA_MODE_TYPE5 == modeType))
     {
         return B_FALSE;
     }
-
     return B_TRUE;
-
 }
 
 uint8_t  scsiGetAluaModeType(TGT_CMD_S *tgtCmd)
@@ -3035,7 +3035,7 @@
     maxLen = scsiGetMaxPortNum(tgtCmd, siteId, (uint8_t)nodeId);
     /*BUFFERĶ˿*/
     descNum = (descFill->buffLen - descFill->fillLen) / (uint32_t)sizeof(SCSI_RTPI_DESC_S);
-    for (portNo = 0; portNo < maxLen; portNo++)
+    for (portNo = 0; portNo < maxLen+8; portNo++)
     {
         rtpi = portNo + 1;
         
@@ -5368,7 +5368,7 @@
     
     return RETURN_OK;
 }
-
+uint16_t tgtRenewRtpi(void* session);
 int32_t scsiGetRelateTpInfo(TGT_CMD_S *tgtCmd, uint16_t *rtpg, uint16_t *rtpi)
 {
     uint8_t site = 0;
@@ -5379,7 +5379,6 @@
     {
         return RETURN_ERROR;
     }
-
     devLunId = scsiGetDevLunId(tgtCmd);
     if (INVALID_VALUE32 == devLunId)
     {
@@ -5389,16 +5388,17 @@
     {
         (void)scsiGetLunAluaHyperSite(devLunId, &site);
     }
-
     if (RETURN_OK != tgtGetTargetPortOwnerNid(tgtCmd->targetPortId, &ctrlId))
     {
         return RETURN_ERROR;
     }
     magic = ((((site & 0x01) << 8) & 0xFF00) << 5) & 0xE000;
-
     *rtpi = (uint16_t)(magic | tgtCmd->rtpi);
     *rtpg = SCSI_GET_HYPER_MAGIC(site, ctrlId + 1);
-
+    if((*rtpi & 0x00ff) == 0){
+		tgtCmd->rtpi = tgtRenewRtpi(tgtCmd->pstSession);
+        *rtpi = (uint16_t)(magic | tgtCmd->rtpi);
+    }
     return RETURN_OK;
 }
 
