Update ordering of a changed zspage in its fullness group LRU list,
even if it has not moved to a different fullness group.

This is needed by zsmalloc shrinking, which partially relies on each
class fullness group list to be kept in LRU order, so the oldest can
be reclaimed first.  Currently, LRU ordering is only updated when
a zspage changes fullness groups.

Signed-off-by: Dan Streetman <ddstr...@ieee.org>
Cc: Minchan Kim <minc...@kernel.org>
---
 mm/zsmalloc.c | 10 ++++------
 1 file changed, 4 insertions(+), 6 deletions(-)

diff --git a/mm/zsmalloc.c b/mm/zsmalloc.c
index fedb70f..51db622 100644
--- a/mm/zsmalloc.c
+++ b/mm/zsmalloc.c
@@ -467,16 +467,14 @@ static enum fullness_group fix_fullness_group(struct 
zs_pool *pool,
        BUG_ON(!is_first_page(page));
 
        get_zspage_mapping(page, &class_idx, &currfg);
-       newfg = get_fullness_group(page);
-       if (newfg == currfg)
-               goto out;
-
        class = &pool->size_class[class_idx];
+       newfg = get_fullness_group(page);
+       /* Need to do this even if currfg == newfg, to update lru */
        remove_zspage(page, class, currfg);
        insert_zspage(page, class, newfg);
-       set_zspage_mapping(page, class_idx, newfg);
+       if (currfg != newfg)
+               set_zspage_mapping(page, class_idx, newfg);
 
-out:
        return newfg;
 }
 
-- 
1.8.3.1

--
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