--- ./source/private_module/mp/mp_array.c	2018-02-09 07:36:26.000000000 +0000
+++ ./source/private_module/mp/mp_array.c.hotpatch	2020-04-24 13:23:32.000000000 +0000
@@ -760,7 +760,7 @@
     }
     return;
 }
-
+void MpUpdateLunInfoTimerProc(void);
 /**************************************************************************
 *     : ʱȥϱ
 * : arraySn: еSN
@@ -775,7 +775,7 @@
 {
     struct list_head *arrayList = NULL;
     MP_ARRAY_S *array = NULL;
-
+    MpUpdateLunInfoTimerProc();
     spin_lock(&g_mpArrayMgr.lock);
     list_for_each(arrayList, &g_mpArrayMgr.arrayHead)
     {
--- ./source/private_module/mp/mp_lun.c	2018-04-22 08:45:38.000000000 +0000
+++ ./source/private_module/mp/mp_lun.c.hotpatch	2020-04-24 13:23:32.000000000 +0000
@@ -4748,7 +4748,7 @@
 
     return ;
 }
-
+void MpSetLunNeedUpdateFlag(LOGICAL_UNIT_S *lun);
 /**************************************************************************
 *     : linkLUN
 * : phyLink linkָ  
@@ -4764,7 +4764,7 @@
     LOGICAL_UNIT_S *lun = NULL;
     LUN_PATH_S *path = NULL;
     PHYSICAL_LINK_S *phyLink = NULL;
-    int32_t ret = RETURN_ERROR;
+    // int32_t ret = RETURN_ERROR;
 
     /* úмüҪںͷü */
     phyLink = mpLookupLinkRefWithId((uint64_t)linkWwn);
@@ -4796,13 +4796,13 @@
         /* begin 2016-01-29@d00351874 DTS2016012708504 */
         mpUpdateExternLunPrInfo(path);
         /* end   2016-01-29@d00351874 DTS2016012708504 */
-        /* begin 2016-09-20@hwx287758 ABBADTS2016092010304 */
-        ret = mpSwitchContextHandleEvent(lun, mpUpdateDeviceInfo);
-        if(RETURN_OK != ret)
-        {
-            DBG_LogError(LOG_ID_MP_040C, "Mp update device info switch thread fail.");
-        }
-        /* end 2016-09-20@hwx287758 ABBADTS2016092010304 */
+        MpSetLunNeedUpdateFlag(lun);
+        
+        //ret = mpSwitchContextHandleEvent(lun, mpUpdateDeviceInfo);
+        //if(RETURN_OK != ret)
+        //{
+        //    DBG_LogError(LOG_ID_MP_040C, "Mp update device info switch thread fail.");
+        //}
     }
     spin_unlock(&phyLink->linkLock);
 
@@ -6453,4 +6453,40 @@
 }
 EXPORT_SYMBOL(mpLunCheckLunIsInvalid);
 
+#define MP_CHECK_NEED_UPDATE_FLAG 0
+#define MP_LUN_NEED_REPORT_UPDATE 12 // MP_LUN_NEED_REPORT_UPDATE_PATCH
+uint32_t g_LunMgrctrlFlag = 0;
+
+void MpSetLunNeedUpdateFlag(LOGICAL_UNIT_S *lun)
+{
+    mpSetDevFlag(&lun->ctrlFlag, MP_LUN_NEED_REPORT_UPDATE);
+    mpSetDevFlag(&g_LunMgrctrlFlag, MP_CHECK_NEED_UPDATE_FLAG);
+}
+
+void MpUpdateLunInfoTimerProc(void)
+{
+    struct list_head *pos = NULL;
+    LOGICAL_UNIT_S *lun = NULL;
+
+    if (!mpTestAndClearDevFlag(&g_LunMgrctrlFlag, MP_CHECK_NEED_UPDATE_FLAG)) {
+        return;
+    }
+
+    spin_lock(&g_mpLunMgr.lock);
+    list_for_each(pos, &g_mpLunMgr.lunHead) {
+        lun = list_entry(pos, LOGICAL_UNIT_S, lunSibling);
+        if (!mpTestAndClearDevFlag(&lun->ctrlFlag, MP_LUN_NEED_REPORT_UPDATE)) {
+            continue;
+        }
+        
+        if (MP_GET_LUN(lun) != RETURN_OK) {
+            continue;
+        }
+
+        mpManualNotifySdUpdateLunCap(lun);
+        mpGetCamoLunInfo(lun);
+        MP_PUT_LUN(lun);
+    }
+    spin_unlock(&g_mpLunMgr.lock);
+}
 
