--- ./source/private_module/epl/V3/epl_pio.c	2018-04-19 08:34:02.000000000 +0000
+++ ./source/private_module/epl/V3/epl_pio.c.hotpatch	2020-01-10 02:09:12.000000000 +0000
@@ -1385,52 +1385,52 @@
     return ctrlId;
     
 }
-
 /**************************************************************************
 *     : ѡһÿ·
 * : ldev:߼
 *           req:·REQ
-*
 * : ctrlId:ID
 * ֵ  : 
 *     : ûпؾebcʹøòѡ
 **************************************************************************/
 void eplSelectFirstAvailableCtrl(EPL_LOGIC_ARRAY_S *ldev, REQ_S *req, uint16_t *ctrlId)
 {
-    uint16_t index = 0;
-    EPL_PRIVATE_IO_S *pio = NULL;
-    uint16_t minCtrl = INVALID_VALUE16;
     uint32_t ctrlMap = 0;
-    unsigned long tridNidMap;
-    unsigned long onlineCtrlMap;
-
+    uint16_t quneIndex = 0;
+    uint16_t randomIndex = 0;
+    uint16_t availableQune[EPL_MAX_CTRL] = {0};
+    unsigned long tridNidMap = 0;
+    unsigned long onlineCtrlMap = 0;
+    EPL_PRIVATE_IO_S *pio = NULL;
+    uint16_t index = 0;
     /*һֱߵĽڵ㲻ѡ*/
     eplGetOnlineNids(&ctrlMap);
-    
     LVOS_TP_START(EPL_IO_CTRL_ONLINE_MAP_SELECT, &ctrlMap)
     LVOS_TP_END
-    
     pio = EPL_GET_PIO(req);
-
     tridNidMap = pio->nidFlag;
     onlineCtrlMap = ctrlMap;
-    for (index = 0; index < EPL_MAX_CTRL; index++)
-    {
+    for (index = 0; index < EPL_MAX_CTRL; index++)    {
         if ((EPL_DEV_GET_READY != ldev->ctrl[index].status)
             || (LVOS_test_bit(index, (void *)(&tridNidMap)))
             || (!LVOS_test_bit((int32_t)index, (void*)(&onlineCtrlMap)))
-            || (eplIsAllLinkDegradeInCtrl(req, ldev->arrayId, (int32_t)index)))
-        {
+            || (eplIsAllLinkDegradeInCtrl(req, ldev->arrayId, (int32_t)index)))        {
             continue;
         }
-
-        minCtrl = index;
+        availableQune[quneIndex] = index;
+        quneIndex++;
     }
-
-    *ctrlId = minCtrl;
-
+    if(0 != quneIndex)
+    {
+        randomIndex = pio->startTimeUs % quneIndex;
+        *ctrlId = availableQune[randomIndex];
+    }
+    else
+    {
+        *ctrlId = INVALID_VALUE16;
+    }
+    DBG_LogDebug(EPL_LOG_ID_048B, "Select random available ctrl, availableNum %u, randomIndex %u, ctrl %u.", quneIndex, randomIndex, *ctrlId);
     return;
-    
 }
 
 /**************************************************************************
