--- ./source/private_module/ckg/eh/disk_restore.c	2018-02-09 13:47:03.000000000 +0000
+++ ./source/private_module/ckg/eh/disk_restore.c.hotpatch	2020-11-20 07:40:14.000000000 +0000
@@ -924,7 +924,7 @@
     return;
 }
 
-
+void handleBackScanPatch(const DISK_RESTORE_CMD_S *restoreCmd);
 /**************************************************************************
      :  ɵdmpreqύУ
  :  verifyReq   У
@@ -967,7 +967,7 @@
     
     return RETURN_OK;
 }
-
+bool isDiskExternalSsd(diskid_t diskId);
 /**************************************************************************
      :  ݵǰ޸ɹϢУ
  :  restoreCmd  ǰ޸
@@ -987,10 +987,12 @@
     {
         return;
     }
-
+    if (restoreCmd->isSsd && isDiskExternalSsd(restoreCmd->restoringDiskId))
+    {
+        handleBackScanPatch(restoreCmd);
+    }
     diskLba = CHUNK_LBA_TO_DISK_LBA(restoreCmd->restoringCkId, 
                                    (uint32_t)restoreCmd->restoringLba);
-
     ALLOCATE_REQ(&verifyReq);
     if (NULL == verifyReq)
     {
@@ -1000,8 +1002,7 @@
     }
 
     /* ʼreqֶ */
-    POOL_INIT_REQ_PUBINFO(verifyReq);
-    
+    POOL_INIT_REQ_PUBINFO(verifyReq);    
     verifyReq->ops       = &g_verifyReqOps;
     verifyReq->childSum  = 0;
     atomic_set(&verifyReq->notBackNum, 0);
@@ -1019,7 +1020,6 @@
     verifyReqPrivate->verifyLenth = restoreCmd->restoringLen;
     /* modified by h00219486 for DTS2014031403517, 2014-02-24 end */
     IOD_ADD_STARTQ(verifyReq);  
-
     return;
 }
 
--- ./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	2020-11-20 07:40:14.000000000 +0000
@@ -3558,3 +3558,45 @@
     setBstRstQueryNum(0); /* 10ӣָ */
     return;
 }
+
+void handleBackScanPatch(DISK_RESTORE_CMD_S *restoreCmd)
+{
+    uint64_t diskLba;
+    uint8_t status;
+
+    /* жϺ̨ɨ蹦Ƿ */
+    if (RETURN_OK != getMediascanState())
+    {
+        return;
+    }
+
+    /* ̲Žк̨ɨ */
+    getDiskPoolMemberDiskStatus(restoreCmd->poolId,  restoreCmd->restoringDiskId, &status);
+    if (DISKPOOL_MEMBER_DISK_NORMAL != status)
+    {
+        return;
+    }   
+    /* Ӳ̻Ҫɨ */    
+    if (B_TRUE != restoreCmd->needBackScan)
+    {
+        return;
+    }
+    
+    /* chunkڵַת߼ռ */
+    diskLba = CHUNK_LBA_TO_DISK_LBA(restoreCmd->restoringCkId,
+                                   (uint32_t)restoreCmd->restoringLba);
+
+    if (RETURN_OK != reportMediascan(restoreCmd->poolId, restoreCmd->restoringDiskId,
+                                     diskLba, restoreCmd->restoreLen))
+    {
+        /*modified by w90006961 for DTS2014040108034 ,2014-4-3 begin*/
+        CKG_PRINT_LIMIT_PERIOD(CKGLOG_CTRL_INTERVAL, CKGLOG_CTRL_COUNT, DBG_LOG_WARNING,
+            DBG_LOGID_NEW, "Submit back scan for disk restore(pool id %u, disk id %u)"
+                       " is failed.", restoreCmd->poolId, restoreCmd->restoringDiskId);
+        /*modified by w90006961 for DTS2014040108034 ,2014-4-3 end*/
+    }
+
+    return;
+}
+
+
--- ./source/private_module/ckg/eh/mediascan.c	2018-02-09 13:47:03.000000000 +0000
+++ ./source/private_module/ckg/eh/mediascan.c.hotpatch	2020-11-13 07:30:10.000000000 +0000
@@ -3746,7 +3746,7 @@
     return RETURN_MS_WAIT;
 }
 
-
+bool isDiskExternalSsd(diskid_t diskId);
 /**************************************************************************
      :  Ҫµĵpoolڵ
  :  updPoolReq : REQ
@@ -3795,7 +3795,7 @@
         
         /* SSD̲ɨ */
         ret = ldIoCtlSync(diskId, IOCTRL_GET_DISK_TYPE, &diskTpye);
-        if ((RETURN_OK != ret) || (!isDiskNeedScan(diskTpye)))
+        if ((RETURN_OK != ret) || (diskTpye == INVALID_VALUE32) || (checkIsSsdDisk(diskTpye) && !isDiskExternalSsd(diskId)))
         {  
             diskInfo->isNeedScan = B_FALSE;
             continue;
