--- ./source/private_module/ckg/eh/eh_public.c	2018-03-31 07:47:15.000000000 +0000
+++ ./source/private_module/ckg/eh/eh_public.c.hotpatch	2018-08-16 14:01:37.000000000 +0000
@@ -1300,7 +1300,7 @@
     
     return;
 }
-
+uint32_t g_upgradingDiskID[MAX_POOL_NUM] = {0}; uint32_t g_upgradingDiskTimer[MAX_POOL_NUM] = {0};
 /**************************************************************************
      :  ϱӲ̷waitaccess
  :  poolId    pool
@@ -1316,23 +1316,27 @@
     struct list_head   *next = NULL;
     DISK_RECOVERY_STATUS_S *recoverNode = NULL;
     DISK_RECOVERY_STATUS_S *recoverNewNode = NULL;
-
     CKG_PRINT_LIMIT_PERIOD(CKGLOG_CTRL_INTERVAL, CKGLOG_CTRL_COUNT_2, DBG_LOG_WARNING,
         CKGLOG_ERRORHANDLE_0119, "Report poolId(%u), disk(%u) satus is waitaccess to EH.", poolId, diskId);
     CLEAR_DISK_DEGRADE_INFO(poolId, queryTierIdByDiskId(diskId), 0ULL);
     /* modified by y00354080 for DTS2015090906388 2015-09-23,begin */
     ALLOCATE_STRUCTURE(MY_PID, g_diskRecoverPartId, (void **)&recoverNewNode);
-    if (NULL == recoverNewNode)
-    {
+    if (NULL == recoverNewNode) {
         CKG_PRINT_LIMIT_PERIOD(CKGLOG_CTRL_INTERVAL, CKGLOG_CTRL_COUNT, DBG_LOG_ERROR,
                                 CKGLOG_ERRORHANDLE_011B, "EH allocate disk recovery struct failed.");
         return;
     }
     /* modified by y00354080 for DTS2015090906388 2015-09-23,end */
-
     spin_lock(&g_diskRecoverLock);
     isExist = FALSE;
-    
+    if (poolId < MAX_POOL_NUM && 0 != g_upgradingDiskID[poolId]
+        && diskId != g_upgradingDiskID[poolId])
+    {
+        spin_unlock(&g_diskRecoverLock);
+        FREE_STRUCTURE(recoverNewNode, g_diskRecoverPartId);
+        recoverNewNode = NULL;		
+        return;
+    }
     list_for_each_safe(pos, next, &g_diskRecoverList)
     {
         recoverNode = list_entry(pos, DISK_RECOVERY_STATUS_S, list);
@@ -1346,7 +1350,6 @@
             break;
         }       
     }
-    
     /* modified by y00354080 for DTS2015090906388 2015-09-23,begin */
     if (isExist)
     {
@@ -1355,17 +1358,14 @@
         recoverNewNode = NULL;
         return;
     }
-
     recoverNewNode->diskId = diskId;
     recoverNewNode->poolId = poolId;
     recoverNewNode->isWaitAccess = B_TRUE;
     recoverNewNode->isRecovery   = B_FALSE;
     recoverNewNode->isNeedRecon  = B_FALSE;
-    
     list_add(&recoverNewNode->list, &g_diskRecoverList);
     /* modified by y00354080 for DTS2015090906388 2015-09-23,end */
     spin_unlock(&g_diskRecoverLock);
-    
     return;
 }
 
@@ -3558,3 +3558,60 @@
     setBstRstQueryNum(0); /* 10ӣָ */
     return;
 }
+extern uint32_t g_upgradingDiskID[MAX_POOL_NUM];
+extern uint32_t g_upgradingDiskTimer[MAX_POOL_NUM];
+/**************************************************************************
+     :  ṩPMGRĽӿڣִ̲еwaitaccess
+ :  
+ :  
+ ֵ  :  
+     :  
+**************************************************************************/
+void setUpgradingDisk(poolid_t poolId, diskid_t  diskId)
+{
+    struct list_head   *pos = NULL;
+    struct list_head   *next = NULL;
+    DISK_RECOVERY_STATUS_S *recoverNode = NULL;
+
+    if (poolId >= MAX_POOL_NUM)
+    {
+        return;
+    }
+
+    spin_lock(&g_diskRecoverLock);
+    g_upgradingDiskID[poolId] = diskId;
+    /*ѯbdmֳʱʱ
+      1.ȴӲȫIOأʱʱ䣺75
+      2.·FWIOʱʱ60
+      3.Ӳ̼ȴFW25
+      4.Ӳµ150 */
+    g_upgradingDiskTimer[poolId] = 75+60+25+150;
+    /* еwaitaccess */
+    list_for_each_safe(pos, next, &g_diskRecoverList)
+    {
+        recoverNode = list_entry(pos, DISK_RECOVERY_STATUS_S, list);
+        
+        if (B_TRUE == recoverNode->isWaitAccess)
+        {
+            recoverNode->isWaitAccess = B_FALSE;
+            CKG_PRINT_LIMIT_PERIOD(CKGLOG_CTRL_INTERVAL, CKGLOG_RES_LACK_CTRL_COUNT, DBG_LOG_INFO,
+				0, "Clear waitaccess status of poolId(%u), disk(%u), isRecovery(%u), isNeedRecon(%u).",
+				recoverNode->poolId, recoverNode->diskId, recoverNode->isRecovery, recoverNode->isNeedRecon);
+        }
+
+        /*ŲûֵͬʱΪB_FALSE,ʹɾȫΪfalseĽṹҲû*/
+        if(B_FALSE == recoverNode->isNeedRecon 
+           && B_FALSE == recoverNode->isRecovery)
+        {
+            list_del(&recoverNode->list);
+            FREE_STRUCTURE(recoverNode, g_diskRecoverPartId);
+            recoverNode = NULL; 
+        }
+    }
+    spin_unlock(&g_diskRecoverLock);
+
+    return;
+}
+EXPORT_SYMBOL(setUpgradingDisk);
+
+
--- ./source/private_module/ckg/eh/mediascan.c	2018-02-09 13:47:03.000000000 +0000
+++ ./source/private_module/ckg/eh/mediascan.c.hotpatch	2018-08-16 14:01:37.000000000 +0000
@@ -4957,7 +4957,7 @@
     
     return;
 }
-
+extern uint32_t g_upgradingDiskID[]; extern uint32_t g_upgradingDiskTimer[];    extern spinlock_t g_diskRecoverLock; 
 /**************************************************************************
      :  ɨ趨ʱִк
  :  mediascanTask   ̨ɨ
@@ -4970,7 +4970,7 @@
     REQ_S *scanTaskReq = NULL;
     bool     executeStatus;
     uint32_t     tskStatus;
-    int32_t     ret;
+    int32_t     ret; poolid_t poolId;
     UNREFERENCE_PARAM(mediascanTask);
     /* MEDIASCANڹܿģʼ */
     if (TRUE == FDSA_GetRestrictTaskStatus(TF_POOL_TASK_MEDIASCAN))
@@ -4979,11 +4979,18 @@
                                 CKGLOG_MEDIASCAN_0098, "The backscan task is under restricted.");
         return;
     }
+    spin_lock(&g_diskRecoverLock);  //ѶЩȫֱ޸ļӵ
+    for(poolId=0; poolId < MAX_POOL_NUM; poolId++)
+    {
+        if(0 < g_upgradingDiskTimer[poolId])
+        {g_upgradingDiskTimer[poolId]--;}
+        else
+        {g_upgradingDiskID[poolId] = 0; }
+    }
+    spin_unlock(&g_diskRecoverLock);
     spin_lock(&(g_msTaskInfo.stLock));
     executeStatus = g_msTaskInfo.mediascanParam.executeStatus;
     tskStatus = g_msTaskInfo.tskStatus;
-    
-
     if (B_TRUE == executeStatus)
     {
         if (MEDIASCAN_TSK_STATE_DONE == tskStatus)
@@ -5009,22 +5016,15 @@
             g_msTaskInfo.startUtcTime = LVOS_GetTime(NULL);
             /*modified by w90006961 for DTS2014031500375 ,2014-3-14 end*/
             scanTaskReq->ops = &g_msScanTaskReqOps;
-
             /* ɨREQز */
             scanTaskReq->opCode = g_msTaskInfo.opCode;
-            
             SET_MS_IO_STEP(scanTaskReq, MEDIASCAN_CTRL_START);
-            
             startRecordPoolBgrTask(PID_BACKSCAN, BACK_TYPE_CKG_SCAN);
-            
             IOD_ADD_STARTQ(scanTaskReq);
-            
             incMediascanIoCount(MEDIASCAN_IO_COUNT_TPYE_SCANTASK, MEDIASCAN_IO_START);
         }
     }
-
     spin_unlock(&(g_msTaskInfo.stLock));
-
     return;
 }
 
