--- ./source/private_module/pal/pal_adapt/pal_adapt_retry.c	2018-03-20 08:57:42.000000000 +0000
+++ ./source/private_module/pal/pal_adapt/pal_adapt_retry.c.hotpatch	2019-07-12 10:10:34.000000000 +0000
@@ -198,17 +198,17 @@
     
     return;
 }
-
+extern uint32_t qureyDirQosSwitch;    extern bool getQueryDirQosSwitch(void);    uint32_t isGetDirQosSwitch = 0;
 /**************************************************************************
      :  ioԶʱ
- :
- :  
- ֵ  :
-     :  
 **************************************************************************/
 void retryPalAdaptIoTask(void *arg)
 {
     UNREFERENCE_PARAM(arg);
+    if (0 == isGetDirQosSwitch)
+    {        qureyDirQosSwitch = getQueryDirQosSwitch();
+        isGetDirQosSwitch = 1;
+        DBG_LogInfo(DBG_LOGID_NEW,"get the dir qos switch (%u) success.", qureyDirQosSwitch);    }    
     retryPalAdaptIoTaskImpl(INVALID_VALUE64, INVALID_VALUE32, INVALID_VALUE64);
 }
 
--- ./source/private_module/pal/pal_adapt/pal_local.c	2018-03-20 08:57:42.000000000 +0000
+++ ./source/private_module/pal/pal_adapt/pal_local.c.hotpatch	2019-07-12 10:10:34.000000000 +0000
@@ -64,17 +64,10 @@
     sendContextToIod((CONTEXT_S*)context);
     LVOS_TP_END;
 }
-
+extern uint32_t qureyDirQosSwitch;
 /**************************************************************************
-     :  ȡqosزϢ
- :  type       ,read/write
-            void*      req
- :  iosize     ioС
-            opType     ͨͲ
- ֵ  :  
      :  READ ӦתΪ  OP_READ     
             WRITE ӦתΪ OP_WRITE_ALLOC
-
             OPERATION_TYPE_READ_ZERO_COPY OPERATION_TYPE_READ
             OPERATION_TYPE_WRITE_ZERO_COPY OPERATION_TYPE_WRITE
 **************************************************************************/
@@ -114,6 +107,13 @@
         *opType = OP_WRITE_ALLOC;
         return RETURN_OK;
     }
+    if ((1 == qureyDirQosSwitch) 
+        && ((OPERATION_TYPE_READDIR == type) || (OPERATION_TYPE_READDIR_PLUS == type) || (OPERATION_TYPE_READDIR_PLUS_EX == type)))
+    {
+        *ioSize = 0;
+        *opType = OP_READ;
+        return RETURN_OK;
+    }
     /*Ƕд*/
     return RETURN_ERROR;
 }
--- ./source/private_module/pal/pal_ctrl/pal_ctrl_intf.c	2018-04-21 09:08:09.000000000 +0000
+++ ./source/private_module/pal/pal_ctrl/pal_ctrl_intf.c.hotpatch	2019-07-12 10:10:34.000000000 +0000
@@ -13706,7 +13706,7 @@
 {
     PAL_PREREAD_CONF_S *conf = getPalPrereadConf();
     
-    if (num < PAL_PREREAD_CFG_MIN_VALUE || num > PAL_PREREAD_CFG_MAX_VALUE)
+    if (num < 1 || num > PAL_PREREAD_CFG_MAX_VALUE)
     {
         return;
     }
--- ./source/private_module/pal/pal_diagnose/pal_ctrl_diagnose.c	2018-02-09 13:47:03.000000000 +0000
+++ ./source/private_module/pal/pal_diagnose/pal_ctrl_diagnose.c.hotpatch	2019-07-12 10:10:34.000000000 +0000
@@ -11,12 +11,12 @@
 #include "pal/pal_ctrl/pal_ctrl_trace.h"
 #include "fs_ctrl.h"
 #include "pal_diagnose.h"
-
+#include "customize.h"
 /* ģID */
 MODULE_ID(PID_SPACE_PAL);
-
 atomic_t g_sendEventCount;
-
+uint32_t qureyDirQosSwitch = 0;    extern bool getQueryDirQosSwitch(void);
+#define BG_PAL_SWITCH_CONF_PTAH    "/startup_disk/conf/conf_local/task_ctrl.ini"
 /**************************************************************************
      :  pal ctrl diagnoseİ
  :  command:
@@ -817,11 +817,6 @@
 
 /**************************************************************************
      :  ʾеtask
- :  
-            
- :  
- ֵ  :  
-     :  
 **************************************************************************/
 void execShowPalCtrlTaskCmd(int32_t argc, char *argv[])    
 {
@@ -831,16 +826,23 @@
     PAL_CTRL_GLOBAL_S     *ctrlObj    = NULL;
     DBG_RUN_TASK_INFO_S   *taskInfo   = NULL;
     struct list_head       taskList;
-    
-    UNREFERENCE_PARAM(argc);
-    UNREFERENCE_PARAM(argv);
-
+    uint32_t getDirQos;        int32_t ret;
+    UNREFERENCE_PARAM(argc);    UNREFERENCE_PARAM(argv);
+    if (1 == argc)
+    {
+        ret = palGetParamU32(argv[0], &getDirQos);
+        if (unlikely(RETURN_OK != ret))
+        {   DBG_Print("ERROR: set the readdir and readdirplus qos switch (%s) is invalid.\n", argv[0]);
+            return;        } 
+        if (1 == getDirQos)
+        {    qureyDirQosSwitch = getQueryDirQosSwitch();
+             DBG_Print("get the readdir and readdirplus qos switch DIR_QOS_BGR (%u) is success.\n", qureyDirQosSwitch);
+        }
+        return;
+    }
     DBG_Print("\nRunning task:\n");
-
     ctrlObj = getCtrlGlobalObj();
-
     INIT_LIST_HEAD(&taskList);
-    
     spin_lock(&ctrlObj->runningTaskList.spLock);
     if (0 == ctrlObj->runningTaskList.size)
     {
@@ -848,12 +850,10 @@
         DBG_Print("No running task.\n");
         return;    
     }
-    
     list_for_each(pos, &ctrlObj->runningTaskList.taskList)
     {
         taskEntry = list_entry(pos, PAL_TASK_LIST_ENTRY_S, head);
         task = taskEntry->task;
-
         taskInfo = PAL_ALLOC_MEMORY(PAL_DBG_TASK_INFO, sizeof(DBG_RUN_TASK_INFO_S));
         if (unlikely(NULL == taskInfo))
         {
@@ -918,3 +918,25 @@
     return;
 }
 
+bool getQueryDirQosSwitch(void)
+{
+    CST_ITEM_T item;
+    uint32_t   itemValue;
+
+    memset(&item, 0, sizeof(CST_ITEM_T));
+    /* ȡ */
+    if (B_FALSE == CST_GetItemFromFile(BG_PAL_SWITCH_CONF_PTAH, "TASK_LIST", "DIR_QOS_BGR", &item))
+    {
+        DBG_LogWarning(0, "Get dirQos bgr swtich failed.");
+        return B_FALSE;
+    }
+
+    itemValue = (uint32_t)LVOS_StrToU64(item.acValue);
+    DBG_LogInfo(DBG_LOGID_NEW, "Get dirQos bgr switch value(%u) success.", itemValue);
+
+    if (0 == itemValue)
+    {
+        return B_FALSE;
+    }
+    return B_TRUE;
+}
\ No newline at end of file
