mirror of https://gitee.com/openkylin/linux.git
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:
parent
58f1711746
commit
ad9d5e175a
|
@ -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);
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue