--- ./source/private_module/tgt/tgt_cfg/tgt_cfg_mapview.c	2018-02-09 13:47:03.000000000 +0000
+++ ./source/private_module/tgt/tgt_cfg/tgt_cfg_mapview.c.hotpatch	2019-03-27 03:03:00.000000000 +0000
@@ -2404,19 +2404,19 @@
     }
     tgtSetHostLunIDBitMap(mapViewDB);
 }
-
+void tgtSetHostLUNIDMarkerByMapviewID(uint32_t mapviewID,bool* hostLUNIDMarker);
 void tgtGetUsedHostLUNIDMapview(uint32_t mapviewID, bool* hostLUNIDMarker)
 {
-    uint32_t i = INVALID_VALUE32;
-
-    tgtSetHostLUNIDBitMapByMapviewID(mapviewID);
+    //uint32_t i = INVALID_VALUE32;
+    memset(hostLUNIDMarker, B_FALSE, g_dbLmpMaxHostLunNum * sizeof(bool));
+    tgtSetHostLUNIDMarkerByMapviewID(mapviewID,hostLUNIDMarker);
+    //DBG_LogDebug(DBG_LOGID_BUTT, "tgtGetUsedHostLUNIDMapview");
     //DBG_ASSERT(NULL != hostLUNIDMarker);
 
-    for ( i = 0; i < g_dbLmpMaxHostLunNum; i++ )
+    /*for ( i = 0; i < g_dbLmpMaxHostLunNum; i++ )
     {
         if (0 != DB_GetBitMapForHostLunId(i))
         {
-            /*Host LUN ID i has been used, skip*/
             hostLUNIDMarker[i] = B_TRUE;
         }
         else
@@ -2424,7 +2424,7 @@
             hostLUNIDMarker[i] = B_FALSE;
         }
     }
-    DB_ClearAllBitMapForHostLunId();
+    DB_ClearAllBitMapForHostLunId();*/
 }
 
 int32_t tgtGetAvalibleObjectID(uint16_t type, uint32_t* objID)
@@ -7563,4 +7563,68 @@
     return B_TRUE;
 }
 /*Modified by q00290033 2015-03-14 DTS2015031011537 END*/
+void DB_CollectHostLunIdMarkerUnderMapView(DB_SCSI_MAP_VIEW_S *mapView,bool* hostLUNIDMarker);
+void DB_SetMarkerForHostLunId(uint32_t hostLunId , bool* hostLUNIDMarker);
+
+void tgtSetHostLunIDMarker(DB_SCSI_MAP_VIEW_S* mapViewDB,bool* hostLUNIDMarker)
+{
+    uint32_t index = 0;
+    DB_SCSI_MAP_VIEW_S* tempMap = NULL;
+    uint32_t maxId = 0;
+
+    DB_CollectHostLunIdMarkerUnderMapView(mapViewDB,hostLUNIDMarker);
+
+    /*Modified by qiuzhao for code review DTS2015100803237 begin*/
+    if ( INVALID_VALUE16 == mapViewDB->hostGroupId )
+    {
+        return;
+    }
+
+    DB_GetMaxAllowedObjectId(TGT_OBJECT_TYPE_MAPVIEW, &maxId);
+    /*Modified by qiuzhao for code review DTS2015100803237 end*/
+    for (index = 0; index < maxId; index++)
+    {
+        DB_GetObjectThroughIdAndType((void**)&tempMap, TGT_OBJECT_TYPE_MAPVIEW, index);
+        if( NULL == tempMap)
+        {
+            DBG_LogError(DBG_LOGID_BUTT, "TGT_LMP:Mapview(%d) does not exist in DB", index);
+            return;
+        }
+        if ((INVALID_VALUE16 == tempMap->mapViewId)
+            || (tempMap->mapViewId != mapViewDB->mapViewId
+                && tempMap->hostGroupId != mapViewDB->hostGroupId))
+        {
+            continue;
+        }
+        if ( (INVALID_VALUE32 != tempMap->inbandLunId) && (tempMap->hostLunId < g_dbLmpMaxHostLunNum) )
+        {
+            DB_SetMarkerForHostLunId(tempMap->hostLunId,hostLUNIDMarker);
+        }
+
+        /* ռкʹӳͼͬӳͼhost lun idԼ*
+                * Ѿʹõhost lunid ὫӦλͼ*/
+        DB_CollectHostLunIdMarkerUnderMapView(tempMap,hostLUNIDMarker);
+    }
+
+}
+
+void tgtSetHostLUNIDMarkerByMapviewID(uint32_t mapviewID,bool* hostLUNIDMarker)
+{
+    DB_SCSI_MAP_VIEW_S* mapViewDB = NULL;
+    uint32_t maxId = 0;
+
+    DB_GetMaxAllowedObjectId(TGT_OBJECT_TYPE_MAPVIEW, &maxId);
+    if ( mapviewID >= maxId)
+    {
+        DBG_LogWarning(DBG_LOGID_NEW, "TGT_LMP:Mapview(%d) doese not exist. maxID(%d)", mapviewID, maxId);
+        return;
+    }
+    DB_GetObjectThroughIdAndType((void**)&mapViewDB, TGT_OBJECT_TYPE_MAPVIEW, mapviewID);
+    if( NULL == mapViewDB)
+    {
+        DBG_LogError(DBG_LOGID_BUTT, "TGT_LMP:Mapview(%d) does not exist in DB", mapviewID);
+        return;
+    }
+    tgtSetHostLunIDMarker(mapViewDB,hostLUNIDMarker);
+}
 
--- ./source/private_module/tgt/tgt_cfg/tgt_dbapp.c	2018-05-08 14:34:12.000000000 +0000
+++ ./source/private_module/tgt/tgt_cfg/tgt_dbapp.c.hotpatch	2019-04-09 13:33:25.000000000 +0000
@@ -21840,3 +21840,75 @@
 #endif
 
 /* END:   Added by z00245196, 2014/7/30 */
+void DB_SetMarkerForHostLunId(uint32_t hostLunId , bool* hostLUNIDMarker)
+{
+    if (g_dbLmpMaxHostLunNum <= hostLunId)
+    {
+        return;
+    }
+    hostLUNIDMarker[hostLunId] = B_TRUE;
+    return;
+}
+
+void DB_CollectHostLunIdMarkerUnderMapView(DB_SCSI_MAP_VIEW_S *mapView,bool* hostLUNIDMarker)
+{
+    DB_SCSI_LUN_LIST_S *lunList = NULL;
+    uint32_t lunIndex = 0;
+    uint32_t hostIndex = 0;
+    uint32_t hostNum = 0;
+    DB_SCSI_HOST_GROUP_S *hostGroup = NULL;
+    DB_SCSI_HOST_S *hostObject = NULL;
+    uint32_t maxId = 0;
+    DB_SCSI_LUN_MAP_S *lunMap = NULL;
+
+    lunIndex = mapView->lunListsFirstIndex;
+    DB_GetMaxAllowedObjectId(TGT_OBJECT_TYPE_LUN_LIST, &maxId);
+     
+    /* ռǰӳͼеhost lunid 뵽ӳͼlunhost lun id*/
+    while (INVALID_VALUE32 != lunIndex)
+    {
+        if( maxId <= lunIndex )
+        {
+            /*TGT_PRINT_WARNING(DBG_LOGID_BUTT, "DB_LMP: Lun ID %u in lunlist of mapview %u reached maximum value %u, ignored.",
+                lunIndex, maxId, mapView->mapViewId);*/
+            break;
+        }  
+        lunList = &g_pDbLunList[lunIndex];
+        DB_SetMarkerForHostLunId(lunList->hostLunId,hostLUNIDMarker);
+        lunIndex = lunList->nextIndex;
+    }
+    
+    if (INVALID_VALUE16 != mapView->hostLunId)
+    {
+        DB_SetMarkerForHostLunId(mapView->hostLunId,hostLUNIDMarker);
+    }
+    
+    if (INVALID_VALUE16 == mapView->hostGroupId)
+    {
+        return;
+    }
+    maxId = 0;
+    DB_GetMaxAllowedObjectId(TGT_OBJECT_TYPE_HOST, &maxId);
+    hostGroup = &g_pDbHostGroup[mapView->hostGroupId];
+    for (hostIndex = 0; hostIndex < maxId && hostNum < hostGroup->hostNums; hostIndex++)
+    {
+        hostObject = &g_pDbHost[hostIndex];
+        if (INVALID_VALUE16 == hostObject->hostId 
+            || B_FALSE == DB_IsHostAddToHostGroup(hostObject->hostId, hostGroup))
+        {
+            continue;
+        }
+        hostNum++;
+        /*ռӳͼhost lun id*/
+        //DB_CollectHostLunIdUnderHost(hostObject);
+
+        lunIndex = hostObject->lunMapFirstIndex;
+        while (INVALID_VALUE32 != lunIndex)
+        {
+            lunMap = &g_pDbLunMap[lunIndex];
+            DB_SetMarkerForHostLunId(lunMap->hostLunId,hostLUNIDMarker);
+            lunIndex = lunMap->nextIndex;
+        }
+    }
+}
+
