zsmalloc: consider ZS_ALMOST_FULL as migrate source

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.

Signed-off-by: Minchan Kim <minchan.kim@lge.com>
Acked-by: Sergey Senozhatsky <sergey.senozhatsky@gmail.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
This commit is contained in:
Minchan Kim 2015-09-08 15:04:47 -07:00 committed by Linus Torvalds
parent 58f1711746
commit ad9d5e175a
1 changed files with 10 additions and 7 deletions

View File

@ -1691,11 +1691,17 @@ static enum fullness_group putback_zspage(struct zs_pool *pool,
static struct page *isolate_source_page(struct size_class *class) static struct page *isolate_source_page(struct size_class *class)
{ {
struct page *page; int i;
struct page *page = NULL;
page = class->fullness_list[ZS_ALMOST_EMPTY]; for (i = ZS_ALMOST_EMPTY; i >= ZS_ALMOST_FULL; i--) {
if (page) page = class->fullness_list[i];
remove_zspage(page, class, ZS_ALMOST_EMPTY); if (!page)
continue;
remove_zspage(page, class, i);
break;
}
return page; return page;
} }
@ -1711,9 +1717,6 @@ static unsigned long zs_can_compact(struct size_class *class)
{ {
unsigned long obj_wasted; unsigned long obj_wasted;
if (!zs_stat_get(class, CLASS_ALMOST_EMPTY))
return 0;
obj_wasted = zs_stat_get(class, OBJ_ALLOCATED) - obj_wasted = zs_stat_get(class, OBJ_ALLOCATED) -
zs_stat_get(class, OBJ_USED); zs_stat_get(class, OBJ_USED);