From: Minchan Kim <minchan....@lge.com>

There is no reason to prevent select ZS_ALMOST_FULL as migration
source if we cannot find source from ZS_ALMOST_EMPTY.

With this patch, zs_can_compact will return more exact result.

* From v1
  * remove unnecessary found variable - Sergey

Signed-off-by: Minchan Kim <minchan....@lge.com>
---
 mm/zsmalloc.c |   17 ++++++++++-------
 1 file changed, 10 insertions(+), 7 deletions(-)

diff --git a/mm/zsmalloc.c b/mm/zsmalloc.c
index 8c78bcb..9012645 100644
--- a/mm/zsmalloc.c
+++ b/mm/zsmalloc.c
@@ -1686,11 +1686,17 @@ static enum fullness_group putback_zspage(struct 
zs_pool *pool,
 
 static struct page *isolate_source_page(struct size_class *class)
 {
-       struct page *page;
+       int i;
+       struct page *page = NULL;
+
+       for (i = ZS_ALMOST_EMPTY; i >= ZS_ALMOST_FULL; i--) {
+               page = class->fullness_list[i];
+               if (!page)
+                       continue;
 
-       page = class->fullness_list[ZS_ALMOST_EMPTY];
-       if (page)
-               remove_zspage(page, class, ZS_ALMOST_EMPTY);
+               remove_zspage(page, class, i);
+               break;
+       }
 
        return page;
 }
@@ -1706,9 +1712,6 @@ static unsigned long zs_can_compact(struct size_class 
*class)
 {
        unsigned long obj_wasted;
 
-       if (!zs_stat_get(class, CLASS_ALMOST_EMPTY))
-               return 0;
-
        obj_wasted = zs_stat_get(class, OBJ_ALLOCATED) -
                zs_stat_get(class, OBJ_USED);
 
-- 
1.7.9.5

--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

Reply via email to