[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <20160418010408.GB5882@swordfish>
Date: Mon, 18 Apr 2016 10:04:08 +0900
From: Sergey Senozhatsky <sergey.senozhatsky.work@...il.com>
To: Minchan Kim <minchan@...nel.org>
Cc: Andrew Morton <akpm@...ux-foundation.org>,
linux-kernel@...r.kernel.org, linux-mm@...ck.org,
jlayton@...chiereds.net, bfields@...ldses.org,
Vlastimil Babka <vbabka@...e.cz>,
Joonsoo Kim <iamjoonsoo.kim@....com>, koct9i@...il.com,
aquini@...hat.com, virtualization@...ts.linux-foundation.org,
Mel Gorman <mgorman@...e.de>, Hugh Dickins <hughd@...gle.com>,
Sergey Senozhatsky <sergey.senozhatsky@...il.com>,
Rik van Riel <riel@...hat.com>, rknize@...orola.com,
Gioh Kim <gi-oh.kim@...fitbricks.com>,
Sangseok Lee <sangseok.lee@....com>,
Chan Gyun Jeong <chan.jeong@....com>,
Al Viro <viro@...IV.linux.org.uk>,
YiPing Xu <xuyiping@...ilicon.com>
Subject: Re: [PATCH v3 11/16] zsmalloc: separate free_zspage from
putback_zspage
Hello Minchan,
On (03/30/16 16:12), Minchan Kim wrote:
[..]
> @@ -1835,23 +1827,31 @@ static void __zs_compact(struct zs_pool *pool, struct size_class *class)
> if (!migrate_zspage(pool, class, &cc))
> break;
>
> - putback_zspage(pool, class, dst_page);
> + VM_BUG_ON_PAGE(putback_zspage(pool, class,
> + dst_page) == ZS_EMPTY, dst_page);
can this VM_BUG_ON_PAGE() condition ever be true?
> }
> /* Stop if we couldn't find slot */
> if (dst_page == NULL)
> break;
> - putback_zspage(pool, class, dst_page);
> - if (putback_zspage(pool, class, src_page) == ZS_EMPTY)
> + VM_BUG_ON_PAGE(putback_zspage(pool, class,
> + dst_page) == ZS_EMPTY, dst_page);
hm... this VM_BUG_ON_PAGE(dst_page) is sort of confusing. under what
circumstances it can be true?
a minor nit, it took me some time (need some coffee I guess) to
correctly parse this macro wrapper
VM_BUG_ON_PAGE(putback_zspage(pool, class,
dst_page) == ZS_EMPTY, dst_page);
may be do it like:
fullness = putback_zspage(pool, class, dst_page);
VM_BUG_ON_PAGE(fullness == ZS_EMPTY, dst_page);
well, if we want to VM_BUG_ON_PAGE() at all. there haven't been any
problems with compaction, is there any specific reason these macros
were added?
> + if (putback_zspage(pool, class, src_page) == ZS_EMPTY) {
> pool->stats.pages_compacted += class->pages_per_zspage;
> - spin_unlock(&class->lock);
> + spin_unlock(&class->lock);
> + free_zspage(pool, class, src_page);
do we really need to free_zspage() out of class->lock?
wouldn't something like this
if (putback_zspage(pool, class, src_page) == ZS_EMPTY) {
pool->stats.pages_compacted += class->pages_per_zspage;
free_zspage(pool, class, src_page);
}
spin_unlock(&class->lock);
be simpler?
besides, free_zspage() now updates class stats out of class lock,
not critical but still.
-ss
> + } else {
> + spin_unlock(&class->lock);
> + }
> +
> cond_resched();
> spin_lock(&class->lock);
> }
>
> if (src_page)
> - putback_zspage(pool, class, src_page);
> + VM_BUG_ON_PAGE(putback_zspage(pool, class,
> + src_page) == ZS_EMPTY, src_page);
>
> spin_unlock(&class->lock);
> }
Powered by blists - more mailing lists