Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit ad9d5e17 authored by Minchan Kim's avatar Minchan Kim Committed by Linus Torvalds
Browse files

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: default avatarMinchan Kim <minchan.kim@lge.com>
Acked-by: default avatarSergey Senozhatsky <sergey.senozhatsky@gmail.com>
Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
parent 58f17117
Loading
Loading
Loading
Loading
+10 −7
Original line number Diff line number Diff line
@@ -1691,11 +1691,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;

	page = class->fullness_list[ZS_ALMOST_EMPTY];
	if (page)
		remove_zspage(page, class, ZS_ALMOST_EMPTY);
	for (i = ZS_ALMOST_EMPTY; i >= ZS_ALMOST_FULL; i--) {
		page = class->fullness_list[i];
		if (!page)
			continue;

		remove_zspage(page, class, i);
		break;
	}

	return page;
}
@@ -1711,9 +1717,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);