The number of writeback and dirty page can be read out from memcg,
the unnecessary waiting can be avoided by these counts

Signed-off-by: Li RongQing <lirongq...@baidu.com>
---
 mm/memcontrol.c | 8 ++++++--
 1 file changed, 6 insertions(+), 2 deletions(-)

diff --git a/mm/memcontrol.c b/mm/memcontrol.c
index 9ec024b862ac..5258651bd4ec 100644
--- a/mm/memcontrol.c
+++ b/mm/memcontrol.c
@@ -2613,9 +2613,13 @@ static int mem_cgroup_force_empty(struct mem_cgroup 
*memcg)
                progress = try_to_free_mem_cgroup_pages(memcg, 1,
                                                        GFP_KERNEL, true);
                if (!progress) {
+                       unsigned long num;
+
+                       num = memcg_page_state(memcg, NR_WRITEBACK) +
+                                       memcg_page_state(memcg, NR_FILE_DIRTY);
                        nr_retries--;
-                       /* maybe some writeback is necessary */
-                       congestion_wait(BLK_RW_ASYNC, HZ/10);
+                       if (num)
+                               congestion_wait(BLK_RW_ASYNC, HZ/10);
                }
 
        }
-- 
2.11.0

Reply via email to